使用了RecyclerView嵌套RecyclerView的方案。
购物车的第一个界面为RecyclerView,每个Item里面包含一个店铺。在Item中使用RecyclerView包含店铺和店铺的多个商品。
实现思路:
使用接口回调将第二个adapter的商品选择的监听事件回调给第一个adapter后再在第一个adapter中回调给MainActivity。
使用接口回调将第一个adapter的商品选择的监听事件回调给MainActivity。
在MainActivity中处理第一个adapter和第二个adapter的事件监听。
MainActivity:
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private CheckBox checkBox;
private recyclerAdapter adapter;
private RecyclerView.LayoutManager manager;
private List<bean> list;
private List<cbean> cbeanList,cbeanListcp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
checkBox = (CheckBox) findViewById(R.id.shop_checkbox);
list = new ArrayList<>();
//第一个店铺的数据
cbeanList = new ArrayList<>();
cbean c = new cbean();
c.setText("商品");
c.setIscheck(false);
cbean c1 = new cbean();
c1.setText("商品1");
c1.setIscheck(false);
cbeanList.add(c);
cbeanList.add(c1);
bean b = new bean();
b.setIscheck(false);
b.setText("店名");
b.setList(cbeanList);
//第二个店铺的数据
cbeanListcp = new ArrayList<>();
cbean c2 = new cbean();
c2.setText("商品2");
c2.setIscheck(false);
cbean c3 = new cbean();
c3.setText("商品3");
c3.setIscheck(false);
cbeanListcp.add(c2);
cbeanListcp.add(c3);
bean b1 = new bean();
b1.setIscheck(false);
b1.setText("店名1");
b1.setList(cbeanListcp);
//不能添加有重复变量的数据
list.add(b);
list.add(b1);
manager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(manager);
//优化性能
recyclerView.setHasFixedSize(true);
adapter = new recyclerAdapter(list);
recyclerView.setAdapter(adapter);
//全选CheckBox监听
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
for (int i = 0;i < list.size();i++){
//选择店铺
if (!list.get(i).ischeck()){
list.get(i).setIscheck(true);
}
for (int j = 0;j < list.get(i).getList().size();j++){
//选择店铺的商品
if (!list.get(i).getList().get(j).ischeck()){
list.get(i).getList().get(j).setIscheck(true);
}
}
}
}else {
//只有当点击全不选时才执行
// 解决点击取消选择店铺或商品时,
// 全选按钮取消选择状态,不会不变成全不选
if (allSelect() == list.size()){
for (int i = 0;i < list.size();i++){
if (list.get(i).ischeck()){
list.get(i).setIscheck(false);
}
for (int j = 0;j < list.get(i).getList().size();j++){