在从 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
})
我正在努力解决这个问题: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
})