RecyclerView多条目里面包含了点击和长按事件 ,事件是在onBindViewHolder中的
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private List<ShowBean.DataBeanX.DataBean> data;
private int TYPE_one = 0;
private int TYPE_two = 1;
//定义接口
//长按时间
public interface OnReItemLongClickLisenter {
void OnReItemLongClick(View view, int position);
}
//点击事件
public interface OnReItemOnclickLisenter {
void OnReItemOnclick(View view, int position);
}
//声明长按接口
private OnReItemLongClickLisenter longClickLisenter;
//声明点击接口
private OnReItemOnclickLisenter clickLisenter;
//长按时间
public void setOnReItemLongClickLisenter(OnReItemLongClickLisenter longClickLisenter) {
this.longClickLisenter = longClickLisenter;
}
//点击事件
public void setOnReItemOnclickLisenter(OnReItemOnclickLisenter clickLisenter) {
this.clickLisenter = clickLisenter;
}
public MyAdapter(Context context, List<ShowBean.DataBeanX.DataBean> data) {
this.context = context;
this.data = data;
}
@Override
public int getItemViewType(int position) {
//0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20
// int i = 1;
// i++;
if (position == 0 || position % 4 == 0) {
return TYPE_two;
} else {
return TYPE_one;
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int type) {
if (type == TYPE_one) {
View view1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item1, null, false);
MyViewHolder myViewHolder = new MyViewHolder(view1);
return myViewHolder;
} else {
View view2 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item2, null, false);
MyViewHolder myViewHolder2 = new MyViewHolder(view2);
return myViewHolder2;
}
//长按点击删除
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, int i) {
int type = getItemViewType(i);
if (type == TYPE_one) {
ShowBean.DataBeanX.DataBean dataBean = data.get(i);
String title = dataBean.getTitle();
String style = dataBean.getStyle();
List<String> pics = dataBean.getPics();
myViewHolder.id1.setText(style);
myViewHolder.title1.setText(title);
Glide.with(context).load("http://365jia.cn/uploads/" + pics).into(myViewHolder.picture1);
} else {
ShowBean.DataBeanX.DataBean dataBean = data.get(i);
String title = dataBean.getTitle();
String style = dataBean.getStyle();
List<String> pics = dataBean.getPics();
myViewHolder.style2.setText(style);
myViewHolder.title2.setText(title);
Glide.with(context).load("http://365jia.cn/uploads/" + pics).into(myViewHolder.picture2);
}
//
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int layoutPosition = myViewHolder.getLayoutPosition();
View itemView = myViewHolder.itemView;
if (clickLisenter != null) {
clickLisenter.OnReItemOnclick(itemView, layoutPosition);
}
}
});
myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int adapterPosition = myViewHolder.getAdapterPosition();
View itemView = myViewHolder.itemView;
if (longClickLisenter != null) {
longClickLisenter.OnReItemLongClick(itemView, adapterPosition);
}
return true;
}
});
}
@Override
public int getItemCount() {
return data.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private final ImageView picture1;
private final TextView id1;
private final TextView title1;
private final TextView title2;
private final TextView style2;
private final ImageView picture2;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
//布局1
title1 = itemView.findViewById(R.id.i1_title);
id1 = itemView.findViewById(R.id.i1_id);
picture1 = itemView.findViewById(R.id.i1_picture);
//布局2
title2 = itemView.findViewById(R.id.i2_title);
style2 = itemView.findViewById(R.id.i2_style);
picture2 = itemView.findViewById(R.id.i2_picture);
}
}
}
里面定义好点击事件后怎么用
adapter.setOnReItemOnclickLisenter(new MyAdapter.OnReItemOnclickLisenter() {
@Override
public void OnReItemOnclick(View view, int position) {
Toast.makeText(MainActivity.this, "点击", Toast.LENGTH_SHORT).show();
}
});
adapter.setOnReItemLongClickLisenter(new MyAdapter.OnReItemLongClickLisenter() {
@Override
public void OnReItemLongClick(View view, int position) {
data.remove(position);
adapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "长按删除!", Toast.LENGTH_SHORT).show();
}
});