刚刚接了个新的购物app项目,有个订单页面是模拟淘宝做的,需要做到店铺list嵌套里边的商品,想了一下使用list嵌套list实现,但是听别人说很不好处理,自己就额外写了个demo,也没发现那么难,就按着逻辑走下来就出来了,下面先看下效果图
实现大概步骤:正常外套的list正常写法,然后再item中写入内部listlayout,然后在adapter中写新的list(这块的逻辑应该没啥问题,运行很流畅,有好实现方案的伙伴分享分享哦),并设置内部adapter,然后点击事件,我是通过接口一层层传出来的,
模拟本地数据
for (int i = 0; i< 10 ; i++){
listtwo.clear();
for (int y = 0 ; y < 5 ; y++){
listtwo.add(new DataTwo("zuo"+ y ,"you"+ y));
}
listone.add(new DataOne("header"+i,"footer"+i,listtwo));
}
外层list正常代码逻辑
recyclerviewMain.setLayoutManager(new LinearLayoutManager(this));
MainAdapter mainAdapter = new MainAdapter(this,listone);
recyclerviewMain.setAdapter(mainAdapter);
内层的list设置设配器
listtwo = listone.get(position).list;
holder.recyclerviewIn.setLayoutManager(new LinearLayoutManager(context));
InsideAdapter insideAdapter = new InsideAdapter(context,listtwo);
holder.recyclerviewIn.setAdapter(insideAdapter);
内层list中item控件点击事件传出
private OnItemButtonOneClickListener mOnItemButtonOneClickListener;
public void setOnItemButtonOneClickListener(OnItemButtonOneClickListener mOnItemButtonOneClickListener) {
this.mOnItemButtonOneClickListener = mOnItemButtonOneClickListener;
}
private OnItemButtonTwoClickListener mOnItemButtonTwoClickListener;
public void setOnItemButtonTwoClickListener(OnItemButtonTwoClickListener mOnItemButtonTwoClickListener) {
this.mOnItemButtonTwoClickListener = mOnItemButtonTwoClickListener;
}
holder.tvTwoitemYou.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemButtonOneClickListener.onButtonOneClick(position);
}
});
holder.tvTwoitemZuo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemButtonTwoClickListener.onButtonTwoClick(position);
}
});
中间层续传内层接口点击事件,以及外层list具体控件点击事件
final int pos = holder.getPosition();
holder.tvHeader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemButtonOneClickListener.onButtonOneClick(pos);
}
});
insideAdapter.setOnItemButtonOneClickListener(new OnItemButtonOneClickListener() {
@Override
public void onButtonOneClick(int position) {
mOnItemInsideButtonOneClickListener.onButtonInsideOneClick(position);
}
});
insideAdapter.setOnItemButtonTwoClickListener(new OnItemButtonTwoClickListener() {
@Override
public void onButtonTwoClick(int position) {
mOnItemInsideButtonTwoClickListener.onButtonInsideTwoClick(position);
}
});
这样事件一层层传出来了 ,也不用在adapter中填写相关业务逻辑,再具体的可以再分出来
其他详细的可以查看源码