- リストのアイテムをクリックしたら
- 別の画面(Activity)に遷移し
- クリックしたデータを次の画面に渡す
という一連の処理を学びます。
🧩 まずは全体像
RecyclerView
やListView
を画面に表示- 各行にクリックリスナーを設定
- クリック時に
Intent
で別のActivity
を起動 Intent.putExtra()
でデータを渡す- 遷移先の
Activity
でgetIntent().getStringExtra(...)
などで受け取る
🔧 RecyclerViewにクリックリスナーを付ける
Adapter
内でクリック処理を定義するのが一般的です。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> dataList;
private Context context;
public MyAdapter(Context context, List<String> list) {
this.context = context;
this.dataList = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(android.R.layout.simple_list_item_1, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String item = dataList.get(position);
holder.textView.setText(item);
// ✅ クリック処理の追加
holder.itemView.setOnClickListener(v -> {
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("item_name", item);
context.startActivity(intent);
});
}
@Override
public int getItemCount() {
return dataList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(android.R.id.text1);
}
}
}
📱 遷移先の DetailActivity
のコード例
public class DetailActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
TextView detailText = findViewById(R.id.detailText);
// ✅ Intentからデータを取得
String itemName = getIntent().getStringExtra("item_name");
detailText.setText("選択されたアイテム: " + itemName);
}
}
🧾 AndroidManifest.xml に遷移先を登録するのも忘れずに!
<activity android:name=".DetailActivity" />
💡 注意点:Contextについて
RecyclerViewの内部は Activity
ではないので、startActivity()
するには Context
が必要です。
→ Adapter
に Context
を渡す or itemView.getContext()
を使うことで解決できます。
✅ まとめ
要素 | 説明 |
---|---|
setOnClickListener() | 各アイテムにクリック処理を設定 |
Intent | 画面遷移の手段 |
putExtra() / getStringExtra() | データの受け渡し |
Context | startActivity() には必須。Adapter内で気をつけるポイント |
🧪 応用(知っておくと良い)
- 複数の値を渡したい →
putExtra()
を複数回 orBundle
にまとめる - オブジェクトを渡したい →
Serializable
orParcelable
を使う