public interface onChildListener{
void onChildClick(RecyclerView parent, View view, int position, String data);
}
(4)写入属性中,并实现他的set方法 private onChildListener onChildListener;
public void setOnChildListener(MyAdapter.onChildListener onChildListener) {
this.onChildListener = onChildListener;
}
/**
* 当连接到RecyclerView后,提供数据的时候调用这个方法
* @param recyclerView
*/
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
this.recyclerView =recyclerView;
}
/**
* 解绑
* @param recyclerView
*/
@Override
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
recyclerView = null;
}
@Override
public void onClick(View view) {
int position = recyclerView.getChildAdapterPosition(view);
if (recyclerView!=null&&listener!=null&&!recyclerView.getItemAnimator().isRunning()) {
listener.onChildClick(recyclerView,view,position,list.get(position));
}
}
这里做一下说明,前两个参数判断你的父布局和你的点击接口是否不为空,那么最后一个判断的是你的删除或者是其他的动画是否在执行,我们需要在动画执行完之后才能实现他的点击事件,否则会出错。
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
view.setOnClickListener(this);
return new MyViewHolder(view);
}
@Override
public void onChildClick(RecyclerView parent, View view, int position, String data) {
Toast.makeText(this,"点击了第"+position+"个条目",Toast.LENGTH_SHORT).show();
}
myRecyclerVIew.setAdapter(myAdapter);
private void initData() {
list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
if (i%3==0) {
list.add(String.format(Locale.CHINA,"第%03d条数据%s",i,"--------------"));
}else{
list.add(String.format(Locale.CHINA,"第%03d条数据",i));
}
}
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayout.VERTICAL,false);
myRecyclerVIew.setLayoutManager(linearLayoutManager);
他有三个参数(当前对象,纵向还是横向,是否翻转布局)GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
myRecyclerVIew.setLayoutManager(gridLayoutManager);
他有4个参数跟List不同的是他的第二个参数为多少行或者说是多少列。StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
myRecyclerVIew.setLayoutManager(staggeredGridLayoutManager);
两个参数(多少行或者列,纵向还是横向) //设置跨行或者跨列的数目
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (position==0) {
return 3;
}else if(position==1){
return 2;
}
return 1;
}
});