【问题标题】:android: Unable to load new activity from RecyclerView.ViewHolderandroid:无法从 RecyclerView.ViewHolder 加载新活动
【发布时间】:2016-09-26 06:12:04
【问题描述】:

我可以在onClick 事件中显示Toast,但无法加载新的Activity

这是我的代码:

public class AppointmentAdapter extends RecyclerView.Adapter<AppointmentAdapter.MyViewHolder> {

    private ArrayList<Appointment> appointmentList;
    private Context mContext;

    public AppointmentAdapter(Context context) {
        mContext = context;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public Button mView, mSend;

        public MyViewHolder(View view) {
            super(view);
            mView = (Button) view.findViewById(R.id.button_view_appointment);
            mSend = (Button) view.findViewById(R.id.button_send_appointment);

            mView.setOnClickListener(this);
            mSend.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {

            if (v.getId() == mView.getId()) {
         //       Toast.makeText(v.getContext(), "View ITEM PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();

                Intent detailsIntent = new Intent(mContext, DetailsActivity.class);
                mContext.startActivity(detailsIntent);
            }

            if (v.getId() == mSend.getId()) {
      //          Toast.makeText(v.getContext(), "Send ITEM PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
            }
        }
    }
    /................./
}

这行代码不起作用。

Intent detailsIntent = new Intent(mContext, DetailsActivity.class);
        mContext.startActivity(detailsIntent);
    }

当我运行这个应用程序时得到NullPointException 请帮忙。提前致谢

【问题讨论】:

  • 如果您绝对确定问题出在该特定行,那么唯一可能导致 NullPointerExceptionmContext 为空
  • NullPointException 表示您正在调用不存在的东西。完全发布您的堆栈跟踪。

标签: android android-recyclerview onclicklistener


【解决方案1】:

您的mContext 变量是null。你需要检查你的代码,看看为什么这个变量是null

既然你说你可以显示Toast 使用v.getContext()。要传递数据,请使用getAdapterPosition() 来获取单击的项目并传递Intent 中的数据。确保Appointment 类实现Serializable 接口。

Appointment selectedAppointment = appointmentList.get(getAdapterPosition());
Intent detailsIntent = new Intent(v.getContext(), DetailsActivity.class);
detailsIntent.putExtra("selectedAppointment", selectedAppointment);
v.getContext().startActivity(detailsIntent);

【讨论】:

  • 你能告诉我,如何将数据从当前位置传递给新活动?
  • 我认为他的上下文为空,因为当他创建适配器时,他传递了空值。例如:AppointmentAdapter appointmentAdapter = new AppointmentAdapter(null);
  • @SrikarReddy 是的,这是可能的。但我们无法确认,因为我们没有代码。
  • 得到错误 java.lang.ClassCastException:com.sohan.propertymission.model.Appointment 不能转换为 java.io.Serializable -help me plz
  • 确保 Appointment 类实现 Serializable 接口。
【解决方案2】:

@sohanoor 你甚至可以尝试在 onBindViewHolder 中生成点击。希望这可以帮助你..

@Override

public void onBindViewHolder(final ViewHolder viewHolder, final int i) { 

    String item = testItems.get(i).getTestname();     
    viewHolder.tvTestList.setText(item );    
    viewHolder.tvTestList.setOnClickListener(new View.OnClickListener()     {  
        @Override  
        public void onClick(View view) {  
          Context context = view.getContext();    
          Intent detailsIntent = new Intent(context, DetailsActivity.class);  
          mContext.startActivity(detailsIntent);  
        }  
    });  
}  

【讨论】:

    【解决方案3】:

    做view.setonclickListner insted of mView.setonclicklistner

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 2013-10-28
      • 2017-01-27
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2018-03-24
      • 2011-03-04
      • 2012-06-13
      相关资源
      最近更新 更多