【问题标题】:RecyclerView onItemClick not working, always show nullpointerexceptionRecyclerView onItemClick 不工作,总是显示空指针异常
【发布时间】:2020-12-10 14:29:03
【问题描述】:

我检查了完整的 Stackoverflow,但我找不到解决方案,可能这是重复的问题,但请帮助我。 我在适配器中创建接口:-

public interface OnItemClickListener {
    void onItemClick(int positon, AdvSearchList_Model item, View view);
}
public MyMatches_New_Adapter(Context context, ArrayList<AdvSearchList_Model> dataList, OnItemClickListener listener) {
    this.context = context;
    this.listItem = dataList;
    this.listener = listener;
}

在 onBindViewHolder:-

final AdvSearchList_Model item = listItem.get(position);
        myholder.setIsRecyclable(false);
        myholder.bind(position, item, listener);

调用绑定函数:-

public void bind(final int position, final AdvSearchList_Model item, final MyMatches_New_Adapter.OnItemClickListener listener) {
                itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onItemClick(position, item, v);
                }
            });
            user_pic_circle_layout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onItemClick(position, item, v);
                }
            });}

并在 Fragment 类中设置 onItemClick:-

adapter1 = new MyMatches_New_Adapter(context, listItem, new MyMatches_New_Adapter.OnItemClickListener() {
        @Override
        public void onItemClick(int positon, final AdvSearchList_Model item, View view) {
            switch (view.getId()) {
                case R.id.user_pic_circle_layout:
                    Toast.makeText(context, "COMMENT Working", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    });

当我单击项目时,它会给我 NullPointerException。请做必要的事。

【问题讨论】:

标签: android android-recyclerview onitemclicklistener onitemclick


【解决方案1】:

在您的适配器中添加此方法 -

 public void setOnItemListener(Context context, ArrayList<AdvSearchList_Model> dataList, OnItemClickListener listener) {    
    this.context = context;
    this.listItem = dataList;
    this.listener = listener;
 }

访问您的片段 -

adapter1.setOnItemListener(context, listItem, new MyMatches_New_Adapter.OnItemClickListener() {
        @Override
        public void onItemClick(int positon, final AdvSearchList_Model item, View view) {
            switch (view.getId()) {
                case R.id.user_pic_circle_layout:
                    Toast.makeText(context, "COMMENT Working", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    });

【讨论】:

    【解决方案2】:

    您必须将适配器类中的上下文向下转换为您的侦听器字段,而不是将侦听器从外部类传递给您的适配器,在 try catch 中执行此操作:

        private Context mContext;
        private OnItemClickListener mListener;
        public MyMatches_New_Adapter(Context context, ArrayList<AdvSearchList_Model> dataList) {
           this.mContext = context;
           this.listItem = dataList;
            try {
                   this.mListener = (OnItemClickListener ) context;
          } catch (ClassCastException e) {
                   throw new ClassCastException(context.toString() +  
              " must implement OnItemClickListener ");
          }
    
     }
    

    你必须像回调一样在你的活动中实现这个接口 试试这个如果不工作告诉我们更多细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多