在从 Fragment 内的 RecyclerView 的 ViewHolder 调用的 startActivity(intent) 中使用 putExtra 时,应用程序崩溃

App crashes when using putExtra in startActivity(intent) called from ViewHolder of RecyclerView inside Fragment

我正在努力解决这个问题:activity 应该启动,但在使用 putExtra 时却没有。唯一发生的事情是我看到 Fragment 在右侧滑动(出现故障后),然后应用程序崩溃了。请注意,此片段是导航组件的一部分。这是我的代码,在 onClick 方法中:

Intent intent = new Intent(v.getContext(), SecondActivity.class);
intent.putExtra("ID", ID);

v.getContext().startActivity(intent);
Log.w("here", "should have started");

其中“v”是我点击的 RecyclerView 的视图。这是点击后不久出现在 Logcat 上的内容:

V/AudioManager: querySoundEffectsEnabled...
W/here: should have started
V/FA: Recording user engagement, ms: 7695
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@b33fd52
V/FA: Connecting to remote service
V/FA: Activity paused, time: 295957791

当我重新打开应用程序时,它从 MainActivity(开头)重新启动。如果我评论 putExtra 行,SecondActivity 将启动,这是一个非常奇怪的行为 imo。任何帮助将不胜感激! :)

提供 Activity 上下文以启动 Activity。 从 ViewHolder 开始一个 activity 不是好的做法,因为它违反了单一职责原则。 实施委托模式以处理 ViewHolder 中的点击侦听器。

interface ItemClickListener {
   void onClick(YourModel item);
}

你的适配器

    class YourAdapter extends RecyclerView.Adapter<YourViewHolder>{
     ItemClickListener listener;
      public YourAdapter(ItemClickListener listener){
      this.listener = listener;
     }
}

监听器的使用

listener.onClick(position); 

你的Activity

YourAdapter adapter = YourAdapter(item -> {
   // handle click
})