androidx的recyclerview中ViewHolder变为静态了,导致构建Item的对象也只能为静态,那么点击item后触发的点击事件不就是同一个了吗?Position不就是相同的了吗?该如何处理,点击的Position又该如何区分?
您的每一个用心回答,都会让这个世界变得更美好一些!
解决了,onBindViewHolder内使用holder.setData(mData.get(position), position);
public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.InnerHolder> { private List<ItemBean_List> mData; private static OnItemClickListener mOnItemClickListener; void setData(List<ItemBean_List> data) { mData = data; } @NonNull @Override public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { //创建条目的回调函数 View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview, parent, false); return new InnerHolder(view); } @Override public void onBindViewHolder(@NonNull InnerHolder holder, int position) { //绑定数据 holder.setData(mData.get(position), position); } @Override public int getItemCount() { //设置条目数量 if (mData != null) { return mData.size(); } return 0; } static class InnerHolder extends RecyclerView.ViewHolder { @SuppressLint("StaticFieldLeak") static TextView textView1, textView2, textView3, textView4, textView5, textView6; int mPosition; InnerHolder(@NonNull View itemView) { super(itemView); textView1 = itemView.findViewById(R.id.textView1); textView2 = itemView.findViewById(R.id.textView2); textView3 = itemView.findViewById(R.id.textView3); textView4 = itemView.findViewById(R.id.textView4); textView5 = itemView.findViewById(R.id.textView5); textView6 = itemView.findViewById(R.id.textView6); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickListener.onClick(mPosition, v); } }); } void setData(ItemBean_List itemBean, int position) { textView1.setText(itemBean.getId()); textView2.setText(itemBean.getProductModel()); textView3.setText(itemBean.getPlanNum()); textView4.setText(itemBean.getCompletNum()); textView5.setText(itemBean.getCompletRate()); textView6.setText(itemBean.getState()); mPosition = position; } } void setItemClickListener(OnItemClickListener listener) { mOnItemClickListener = listener; } //创建一个接口 public interface OnItemClickListener { void onClick(int position, View v); } }
你搞错了吧????
androidx的recyclerview中ViewHolder变为静态了
本来就是静态的呀
public abstract static class ViewHolder
是一个内部类,必须要静态呀。不静态你外面怎么继承它创建对象呢?
你继承自即可,你的不需要写成静态。然后new出来就行了。
解决了,onBindViewHolder内使用holder.setData(mData.get(position), position);
你搞错了吧????
androidx的recyclerview中ViewHolder变为静态了
本来就是静态的呀
public abstract static class ViewHolder
是一个内部类,必须要静态呀。不静态你外面怎么继承它创建对象呢?
你继承自即可,你的不需要写成静态。然后new出来就行了。