ListView嵌套ListView并实现全选计数与Search页面的数据同步
2016-12-13 16:56
375 查看
先上代码,原理后面梳理需要源码请戳
MainActivity类:
SearchActivity类:
最终集合通过,adapter.getList获取
有不懂的留言
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获取
有不懂的留言
相关文章推荐
- Android中ListView结合CheckBox实现数据批量选择(全选、反选、全不选)
- [置顶] gridview中嵌套gridview(并实现子gridview的数据绑定),页面传值,加密,数据绑定
- DataList嵌套DataList 子DataList访问父DataList数据(1. 页面绑定后台代码实现 纯代码)
- Android ExpandableListView 实现购物车页面 全选 多选编辑删除
- jsp页面某项数据太长用特殊符号代替和全选并删除功能的实现
- Listview嵌套CheckBOX 实现全选反选取消,并对选中项进行标记
- Android实现ListView嵌套Checkbox真正的多选、全选、反选
- 实现apk下载+跳转WiFi设置页面+xlistview加载数据
- gridview中嵌套gridview(并实现子gridview的数据绑定),页面传值,加密,数据绑定
- android listview数据跨页面同步
- loction.search 通过地址栏实现页面之间的数据传输、接受、展示、处理方法
- Android开发——listview中嵌套checkBox复选框实现单选、全选删除列表内容
- 实现xlistview+xutils展示数据之后点击item跳转页面显示图片缩放和放大
- 弹窗添加数据后实现父级页面同步添加
- 自义定数据类型SearchView+listview搜索实现
- 在Asp.net页面中实现数据饼图
- 在ASP.NET页面中实现数据饼图
- 在JSP页面中轻松实现数据饼图
- ASP.NET中用javascript实现页面间传递数据的方法
- 在ASP.NET页面中实现数据棒图