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