Android Java:RecyclerView行长按后无法启动UpdateLanguageActivity问题
RecyclerView 长按Item跳转UpdateLanguageActivity解决方案
核心实现步骤
给RecyclerView的每个Item绑定长按监听,通过正确获取上下文创建Intent并启动目标Activity,具体操作如下:
- 在Adapter中为ItemView添加
OnLongClickListener - 通过ItemView本身或Adapter构造传入的Context创建Intent
- 按需携带数据后启动UpdateLanguageActivity
完整代码示例
public class LanguageAdapter extends RecyclerView.Adapter<LanguageAdapter.ViewHolder> { private List<Language> mLanguageList; // 可选:持有全局Context,也可直接从ItemView获取上下文 private Context mContext; // 构造方法,传入数据列表和上下文 public LanguageAdapter(List<Language> languageList, Context context) { mLanguageList = languageList; mContext = context; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // 加载Item布局 View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_language, parent, false); ViewHolder holder = new ViewHolder(itemView); // 设置长按监听 itemView.setOnLongClickListener(v -> { // 获取当前Item的位置 int position = holder.getAdapterPosition(); Language targetLang = mLanguageList.get(position); // 方式1:用构造传入的Context创建Intent Intent updateIntent = new Intent(mContext, UpdateLanguageActivity.class); // 携带数据示例:传入选中语言的ID updateIntent.putExtra("SELECTED_LANG_ID", targetLang.getId()); mContext.startActivity(updateIntent); // 方式2:直接从ItemView获取Context(无需在构造方法传入Context) // Intent updateIntent = new Intent(v.getContext(), UpdateLanguageActivity.class); // v.getContext().startActivity(updateIntent); return true; // 标记长按事件已处理 }); return holder; } // ViewHolder定义 static class ViewHolder extends RecyclerView.ViewHolder { TextView tvLangName; public ViewHolder(@NonNull View itemView) { super(itemView); tvLangName = itemView.findViewById(R.id.tv_language_name); } } // 绑定数据和获取列表长度的方法 @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { Language lang = mLanguageList.get(position); holder.tvLangName.setText(lang.getName()); } @Override public int getItemCount() { return mLanguageList.size(); } }
额外注意点
- 如果在Fragment中使用RecyclerView,传入Adapter的Context推荐用
requireContext(),避免getActivity()空指针问题 - 若需要启动Activity并接收返回结果,API 30+建议使用
registerForActivityResult,低版本可使用startActivityForResult,此时需确保Context是Activity类型:if (mContext instanceof Activity) { ((Activity) mContext).startActivityForResult(updateIntent, YOUR_REQUEST_CODE); }
内容的提问来源于stack exchange,提问作者Soumpanhaoudom
相关产品推荐
相关产品推荐

