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;
}
});