项目中一个功能需要RecyclerView嵌套如下图
(图片来自网络)
内部Adapter 核心代码
holder.btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(con, "删除", Toast.LENGTH_SHORT).show(); lisner.onCilck(position); } }); rv2.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return false; } }); 复制代码
public class TestKActivity extends AppCompatActivity {
private RecyclerView rvone;
private TestAdapter testAdapter;
private List<String> datas= new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_k);
rvone=(RecyclerView)findViewById(R.id.rv_1);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
testAdapter = new TestAdapter(this);
rvone.setAdapter(testAdapter);
rvone.setLayoutManager(linearLayoutManager);
inidata();
testAdapter.setUpdate(datas);
testAdapter.setLisner(new TestAdapter.Lisner() {
@Override
public void onCilck(int postion) {
Toast.makeText(TestKActivity.this, "=aaaaaaaaa="+postion, Toast.LENGTH_SHORT).show();
testAdapter.removes(postion);
}
});
}
private void inidata() {
for(int i=0;i<10;i++){
datas.add("-A-"+i);
}
}
}
复制代码
//外层的Adapter
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.MyViewHodewr> {
private Context con;
private List<String> datas = new ArrayList<>();
private List<String> datab = new ArrayList<>();
private TestTwoAdapter testTwoAdapter;
private RecyclerView rv2;
public TestAdapter(TestKActivity testKActivity) {
this.con = testKActivity;
for (int i = 0; i < 4; i++) {
datab.add("-B-" + i);
}
}
@NonNull
@Override
public MyViewHodewr onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_a, parent, false);
return new MyViewHodewr(inflate);
}
@Override
public void onBindViewHolder(@NonNull MyViewHodewr holder, int position) {
//拦截内部的recyView
// holder.itemView.setOnTouchListener(new View.OnTouchListener() {
// @Override
// public boolean onTouch(View v, MotionEvent event) {
// return rv2.onTouchEvent(event);
// }
// });
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(con, "Aaa", Toast.LENGTH_SHORT).show();
if (lisner != null) {
lisner.onCilck(position);
}
}
});
// holder.tv.setText(datas.get(position));
testTwoAdapter = new TestTwoAdapter();
rv2 = holder.rv2;
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(con);
GridLayoutManager gridLayoutManager = new GridLayoutManager(con, 3);
linearLayoutManager.setOrientation(RecyclerView.HORIZONTAL);
rv2.setLayoutManager(gridLayoutManager);
rv2.setAdapter(testTwoAdapter);
testTwoAdapter.setUpdate(datab);
testTwoAdapter.setLisner(new TestTwoAdapter.Lisners() {
@Override
public void onCilck(int postions) {
Toast.makeText(con, "bbb" + postions, Toast.LENGTH_SHORT).show();
}
});
holder.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(con, "删除", Toast.LENGTH_SHORT).show();
lisner.onCilck(position);
}
});
rv2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
}
@Override
public int getItemCount() {
return datas.size() > 0 ? datas.size() : 0;
}
public void setUpdate(List<String> datass) {
this.datas.addAll(datass);
}
public void removes(int postion) {
if(this.datas!=null){
datas.remove(postion);
notifyDataSetChanged();
}
}
class MyViewHodewr extends RecyclerView.ViewHolder {
private Button btn;
private TextView tv;
private RecyclerView rv2;
public MyViewHodewr(@NonNull View itemView) {
super(itemView);
rv2 = (RecyclerView) itemView.findViewById(R.id.rv_2);
tv = (TextView) itemView.findViewById(R.id.tv);
btn= (Button) itemView.findViewById(R.id.detele);
}
}
public void setLisner(Lisner lisner) {
this.lisner = lisner;
}
private Lisner lisner = null;
interface Lisner {
public void onCilck(int postion);
}
}
复制代码
内部Item的 Adapter
public class TestTwoAdapter extends RecyclerView.Adapter<TestTwoAdapter.MyViewHoldler> {
private List<String> datas= new ArrayList<>();
@NonNull
@Override
public MyViewHoldler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_two, parent, false);
return new MyViewHoldler(inflate);
}
@Override
public void onBindViewHolder(@NonNull MyViewHoldler holder, int position) {
holder.name.setText(datas.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
private int positio;
@Override
public void onClick(View v) {
if( lisner!=null){
lisner.onCilck(position);
this.positio= position;
}
}
});
}
@Override
public int getItemCount() {
return datas.size()>0?datas.size():0;
}
public void setUpdate(List<String> datasS) {
datas.addAll(datasS);
}
class MyViewHoldler extends RecyclerView.ViewHolder{
private TextView title;
private TextView name;
private ImageView image;
public MyViewHoldler(@NonNull View itemView) {
super(itemView);
image= (ImageView)itemView.findViewById(R.id.image_on);
name= (TextView)itemView.findViewById(R.id.name_1);
title= (TextView)itemView.findViewById(R.id.title_1);
}
}
public void setLisner(Lisners lisner) {
this.lisner = lisner;
}
private Lisners lisner=null;
interface Lisners{
public void onCilck(int postion);
}
}
复制代码