You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为按钮RecyclerView添加OnItemClickListener并跳转至带不同TextView的Activity

Solution for RecyclerView Item Click with Activity Navigation

Got it, let's fix up your RecyclerView adapter to handle item clicks and navigate to a detail Activity with dynamic text content. Here's how to do it step by step:

1. Add an OnItemClickListener Interface to Your Adapter

First, we'll define a custom click listener interface inside your RecAdapter class. This lets your parent Activity/Fragment handle the click action cleanly, keeping adapter logic focused on UI binding.

public class RecAdapter extends RecyclerView.Adapter<RecAdapter.ViewHolder> { 
    // Custom click listener interface
    public interface OnItemClickListener {
        void onItemClick(items item);
    }

    private OnItemClickListener listener;
    private Context context; 
    private List<items> items; 

    // Update constructor to accept the click listener
    public RecAdapter(Context c, List<items> itemList, OnItemClickListener listener) { 
        this.context = c; 
        this.items = itemList;
        this.listener = listener;
    }

    public class ViewHolder extends RecyclerView.ViewHolder { 
        Button button; 
        public ViewHolder(View itemView) { 
            super(itemView); 
            button = itemView.findViewById(R.id.buttonn); 
            // Attach click listener to the button
            button.setOnClickListener(v -> {
                int position = getAdapterPosition();
                // Avoid invalid position clicks (e.g., during scroll/updates)
                if (position != RecyclerView.NO_POSITION && listener != null) {
                    listener.onItemClick(items.get(position));
                }
            });
        } 
    } 

    // Keep your existing view binding logic
    @Override 
    public RecAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.buttonss, parent, false); 
        return new ViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(RecAdapter.ViewHolder holder, int position) { 
        items p = items.get(position); 
        holder.button.setText(p.getName()); 
    } 

    @Override 
    public int getItemCount() { 
        return items.size(); 
    } 
}

2. Create the Detail Activity with TextView

Next, make a new Activity (let's name it DetailActivity) to display the dynamic text. First, set up its layout:

Layout file (activity_detail.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:padding="16dp">

    <TextView
        android:id="@+id/detail_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="22sp"
        android:textColor="@android:color/black"/>

</LinearLayout>

DetailActivity Java code

public class DetailActivity extends AppCompatActivity {
    // Key for passing data via Intent
    public static final String EXTRA_ITEM_DETAIL = "extra_item_detail";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        TextView detailTextView = findViewById(R.id.detail_text_view);
        // Retrieve the passed data from Intent
        String itemDetail = getIntent().getStringExtra(EXTRA_ITEM_DETAIL);
        detailTextView.setText(itemDetail);
    }
}

Don't forget to register this Activity in your AndroidManifest.xml:

<activity android:name=".DetailActivity"/>

3. Set Up the Click Listener in Your Parent Activity/Fragment

Finally, when initializing your RecAdapter, pass in the click listener to handle navigation to the DetailActivity:

// In your parent Activity/Fragment where you configure the RecyclerView
RecyclerView recyclerView = findViewById(R.id.your_recyclerview_id);
List<items> itemList = // Your existing data list
RecAdapter adapter = new RecAdapter(this, itemList, item -> {
    // Launch DetailActivity and pass the item's specific text
    Intent intent = new Intent(this, DetailActivity.class);
    // Replace "getDetailText()" with the method in your items class that returns the desired text
    intent.putExtra(DetailActivity.EXTRA_ITEM_DETAIL, item.getDetailText());
    startActivity(intent);
});

recyclerView.setAdapter(adapter);
// Don't forget to set a LayoutManager (required for RecyclerView)
recyclerView.setLayoutManager(new LinearLayoutManager(this));

Quick Notes:

  • Ensure your items class has a method (like getDetailText()) that returns the unique text you want to display for each button. Adjust this to match your actual data structure.
  • The getAdapterPosition() check prevents errors if the item is no longer available (e.g., during list updates or fast scrolling).

内容的提问来源于stack exchange,提问作者Hamza Khalifa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:27:30