ListView嵌套ListView并实现全选计数与Search页面的数据同步
来源:互联网 发布:乐高积木淘宝网 编辑:程序博客网 时间:2024/05/21 18:46
先上代码,原理后面梳理需要源码请戳
MainActivity类:
package com.example.teemo.check;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;import com.example.teemo.check.adapter.ParentAdapter;import com.example.teemo.check.app.CommonActivity;import com.example.teemo.check.bean.Child;import com.example.teemo.check.bean.ChildAdapterData;import com.example.teemo.check.bean.EventData;import com.example.teemo.check.bean.Group;import com.example.teemo.check.bean.SearchData;import org.greenrobot.eventbus.Subscribe;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;public class MainActivity extends CommonActivity implements ParentAdapter.OnCountListener, ParentAdapter.OnRefresh { private ListView listView; ArrayList<Group> groups; Map<Group, Boolean> map = new HashMap<>(); ParentAdapter adapter; ArrayList<Child> childs = new ArrayList<>(); // 传到搜索数据 private Button bt_count; private ArrayList<String> idList; int amount; int typeServe; int totalCount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); idList = new ArrayList<>(); listView = (ListView) findViewById(R.id.listView_Parent); bt_count = (Button) findViewById(R.id.bt_count); groups = new ArrayList<>(); initData(); adapter = new ParentAdapter(groups, this, map); adapter.setOnCountListener(this); adapter.setOnRefresh(this); listView.setAdapter(adapter); bt_count.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int counts = 0; idList.clear(); ArrayList<Group> list = adapter.getList(); for (int i = 0; i < list.size(); i++) { Group group = list.get(i); for (int k = 0; k < group.getChildrenCount(); k++) { if (group.getChildren().get(k).getChecked()) { counts++; // 选中的总数量 idList.add(group.getChildren().get(k).getUserid()); // id的集合 (全部获取的是 adapter里的) } } } Toast.makeText(MainActivity.this, "已经选中" + counts, Toast.LENGTH_SHORT).show(); } }); genericFindViewById(R.id.text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent in = new Intent(getApplicationContext(), SearchActivity.class); in.putParcelableArrayListExtra("search_list", childs); startActivityForResult(in, 1); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { if (resultCode == 2) { // resultCode == 2 代表取消 group里的 child的 item的checked 全部为false for (int i = 0; i < groups.size(); i++) { Group group = groups.get(i); for (int k = 0; k < group.getChildren().size(); k++) { ArrayList<Child> children = group.getChildren(); Child child = children.get(k); child.setChecked(false); } } adapter.setList(groups); } else { // resultCode != 2 将search 选中的 添加进 集合中 ArrayList<ChildAdapterData> list = (ArrayList<ChildAdapterData>) data .getSerializableExtra("list"); if (list != null && list.size() > 0) { totalCount = 0; for (int i = 0; i < groups.size(); i++) { Group group = groups.get(i); ArrayList<Child> children = group.getChildren(); for (int j = 0; j < children.size(); j++) { Child child = children.get(j); for (int k = 0; k < list.size(); k++) { Log.e("UserId", child.getUserid() + ",,,,,id:,," + list.get(k).id); if (child.getUserid().equals(list.get(k).id)) { children.get(j).setChecked(list.get(k).isCheck); } } } } adapter.setList(groups); } } } } @Override protected boolean isBindEventBusHere() { return false; } private void initData() { int s = 0; for (int i = 0; i < 30; i++) { Group group = new Group("id" + i, "一级目录" + i); for (int j = 0; j < 3; j++) { Child child = new Child("userid" + s, i + "下的二级目录" + j, "username" + j); s++; group.addChildrenItem(child); childs.add(child); } map.put(group, true); groups.add(group); } } @Override public void onCountListener(int amount) { this.amount = amount; typeServe = amount; totalCount = amount;// Toast.makeText(MainActivity.this, "已选中" + (amount) + "个品类", Toast.LENGTH_SHORT)// .show(); } @Override public void onRefresh(int position, boolean bon) { Group group = groups.get(position); map.put(group, bon); adapter.notifyDataSetChanged(); } @Override public void onBackPressed() { //这里需要把最终改变后的groups保存到Application中,最终集合通过adapter.getList获取 BaseApplication.getInstance().groups = adapter.getList(); super.onBackPressed(); }}
SearchActivity类:
package com.example.teemo.check;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.view.View;import android.widget.ListView;import android.widget.TextView;import com.example.teemo.check.adapter.SearchAdapter;import com.example.teemo.check.app.ClearEditText;import com.example.teemo.check.app.CommonActivity;import com.example.teemo.check.bean.Child;import com.example.teemo.check.bean.ChildAdapterData;import com.example.teemo.check.bean.EventData;import com.example.teemo.check.bean.SearchData;import org.greenrobot.eventbus.Subscribe;import java.util.ArrayList;import java.util.List;public class SearchActivity extends CommonActivity implements SearchAdapter.OnCountIdListener { ClearEditText edit; TextView text; ListView listView; private int t = 0;// 0 取消 1确定 SearchAdapter adapter; List<ChildAdapterData> lists = new ArrayList<>(); private ArrayList<Child> search_list; private SearchData mSearchData; private ArrayList<ChildAdapterData> filterDateList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); Intent intent = getIntent(); search_list = intent.getParcelableArrayListExtra("search_list"); lists = filledData(); initView(); genericFindViewById(R.id.search_text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (t == 0) { setResult(2); finish(); } else { onBackPressed(); } } }); } @Override protected boolean isBindEventBusHere() { return false; } private void initView() { edit = genericFindViewById(R.id.search_filter_edit); text = genericFindViewById(R.id.search_text); listView = genericFindViewById(R.id.search_list); adapter = new SearchAdapter(null, this); adapter.setOnCountIdListener(this); listView.setAdapter(adapter); edit.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { filterData(s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); } private List<ChildAdapterData> filledData() { List<ChildAdapterData> mSortList = new ArrayList<>(); if (search_list != null && search_list.size() > 0) { for (int i = 0; i < search_list.size(); i++) { ChildAdapterData sortModel = new ChildAdapterData(); sortModel.title = search_list.get(i).getFullname(); sortModel.id = search_list.get(i).getUserid(); sortModel.isCheck = search_list.get(i).getChecked(); mSortList.add(sortModel); } } return mSortList; } private void filterData(String filterStr) { if (filterDateList == null) { filterDateList = new ArrayList<>(); } if (TextUtils.isEmpty(filterStr)) { filterDateList = null; t = 0; text.setText("取消"); } else { t = 1; text.setText("确定"); filterDateList.clear(); for (ChildAdapterData sortModel : lists) { String name = sortModel.title; if (name.indexOf(filterStr.toString()) != -1) { filterDateList.add(sortModel); } } } adapter.updateListView(filterDateList); } @Subscribe public void onEventMainThread(EventData event) { switch (event.getEventCode()) { } } // 返回键 将选中的list集合 回传到 main页面 @Override public void onBackPressed() { ArrayList<ChildAdapterData> lists = adapter.getLists(); Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putSerializable("list", lists); intent.putExtras(bundle); setResult(Activity.RESULT_OK, intent); super.onBackPressed(); } List<String> idList; @Override public void onCountIdListener(int count, List<String> idLists) {// showToast("搜索选中id = "+idLists.size()); this.idList = idLists; mSearchData = new SearchData(count, idLists); }}
最终集合通过,adapter.getList获取
有不懂的留言
0 0
- ListView嵌套ListView并实现全选计数与Search页面的数据同步
- Listview嵌套CheckBOX 实现全选反选取消,并对选中项进行标记
- Android ListView嵌套ListView的实现方式
- Android ListView嵌套ListView的实现方式
- Listview嵌套Listview的实现方法
- C# ListView控件的item项目实现全选与取消
- Listview嵌套Viewpager实现仿淘宝搜狐广告主页,并实现listview的下拉刷新
- Android实现ListView嵌套Checkbox真正的多选、全选、反选
- ListView 实现全选功能
- android listview数据跨页面同步
- ScrollView嵌套listview,并计算listview的高度
- ListView中加复选框并实现全选(全不选)
- ListView和CheckBox嵌套,全选,反选
- ListView嵌套ListView的问题
- ListView嵌套ListView的思路
- listview与scorolview嵌套
- listview嵌套gridview,并实现grid元素部分显示以及点击展开与折叠
- android listview嵌套gridview,并实现grid元素部分显示以及点击展开与折叠
- CSS的选择器
- perl几个特殊的内置函数
- [产品经理]产品经理的职业发展路线
- selenium 学习<1>
- MII/MDIO接口详解
- ListView嵌套ListView并实现全选计数与Search页面的数据同步
- jq获取后台传过来的json格式数据
- laravel表单验证
- iOS-基于runtime的归档处理
- 数据结构实验之查找一:二叉排序树
- 网转 mm IOS 报表
- Viewpager+Fragment+webview中的输入框不弹出软键盘的坑
- Linux克隆虚拟机修改ip
- 数据结构实验之查找一:二叉排序树