您的位置:首页 > 其它

ListView嵌套ListView并实现全选计数与Search页面的数据同步

2016-12-13 16:56 375 查看
先上代码,原理后面梳理需要源码请戳

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获取

有不懂的留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: