调用startActivity(intent)后新Activity无法启动问题求助
问题分析与修复方案
你遇到的新Activity无法启动的问题,主要有几个关键错误需要修正,我帮你一一拆解:
1. Adapter类名冲突(最核心问题)
你自定义的Adapter类名是RecyclerView,这和Android官方的androidx.recyclerview.widget.RecyclerView完全重名了!这会导致在initClareRV()方法中,你创建的其实是原生RecyclerView控件,而不是自己写的Adapter:
// 这里的RecyclerView是原生控件,不是你的自定义Adapter! RecyclerView adapter = new RecyclerView(this, mNames, mParties, mImageUrls, this);
修复: 把你的Adapter类名改成ClareMembersRecyclerView(从构造函数名称能看出你本来想叫这个),彻底避免类名冲突。
2. ViewHolder未绑定点击事件
你的ViewHolder实现了View.OnClickListener,但没有给任何视图设置点击监听,导致onClick()方法永远不会被触发。需要在ViewHolder构造函数里,给列表项或子控件绑定点击事件。
3. 重复的点击逻辑冗余
你在onBindViewHolder()里给图片设置了点击监听,但既没启动Activity,又和接口的点击逻辑重复,建议统一用接口方式处理点击,保持代码整洁。
修复后的完整代码
1. 修正Adapter类名与点击逻辑(ClareMembersRecyclerView.java)
// 修正类名,避免和原生RecyclerView冲突 public class ClareMembersRecyclerView extends RecyclerView.Adapter<ClareMembersRecyclerView.ViewHolder>{ private static final String TAG = "ClareMembersRV"; private ArrayList<String> mNames = new ArrayList<>(); private ArrayList<String> mParties = new ArrayList<>(); private ArrayList<String> mImageUrls = new ArrayList<>(); private Context mContext; private OnNoteListener mOnNoteListener; public ClareMembersRecyclerView(Context context, ArrayList<String> names, ArrayList<String> parties, ArrayList<String> imageUrls, OnNoteListener onNoteListener){ mNames = names; mParties = parties; mImageUrls = imageUrls; mContext = context; this.mOnNoteListener = onNoteListener; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { Log.d(TAG, "onCreateViewHolder: called."); View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_members_clare, parent, false); return new ViewHolder(view, mOnNoteListener); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { Log.d(TAG, "onBindViewHolder: called."); Glide.with(mContext) .asBitmap() .load(mImageUrls.get(position)) .into(holder.image); holder.name.setText(mNames.get(position)); holder.party.setText(mParties.get(position)); // 移除重复的图片点击逻辑,统一用接口处理 } @Override public int getItemCount() { return mImageUrls.size(); } public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ CircleImageView image; TextView name; TextView party; OnNoteListener onNoteListener; public ViewHolder(View itemView, OnNoteListener onNoteListener) { super(itemView); image = itemView.findViewById(R.id.imgClareCircle); name = itemView.findViewById(R.id.tvClareName); party = itemView.findViewById(R.id.tvClareParty); this.onNoteListener = onNoteListener; // 给整个列表项绑定点击事件,也可以单独给图片/文字控件设置 itemView.setOnClickListener(this); } @Override public void onClick(View v) { // 调用接口方法,传递当前列表项的位置 onNoteListener.onNoteClick(getAdapterPosition()); } } public interface OnNoteListener{ void onNoteClick(int position); } }
2. 修正ConstituencyKerry.java中的Adapter初始化
private void initClareRV(){ LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); RecyclerView recyclerView = findViewById(R.id.rv_Kerry_Members); recyclerView.setLayoutManager(layoutManager); // 使用正确的自定义Adapter类名 ClareMembersRecyclerView adapter = new ClareMembersRecyclerView(this, mNames, mParties, mImageUrls, this); recyclerView.setAdapter(adapter); }
额外检查项
- 确保
MembersMapDetailed已经在AndroidManifest.xml中注册:
<activity android:name=".MembersMapDetailed" />
- 确认传递的Extra数据无空值(你的mNames/mParties/mImageUrls初始化逻辑没问题)。
这样修改后,点击RecyclerView列表项就能正常启动新Activity并传递数据了!
内容的提问来源于stack exchange,提问作者AndroidProButNo
相关产品推荐
相关产品推荐

