RecyclerViewをクリック検知してIntentを発行したいのですが、うまくいきません。
RecyclerViewのクリック検知ですが、自分が調べた範囲では「setOnClickListenerはRecyclerAdapterのonCreateViewHolderに書く」とありました。手元のリファレンス本もその記述だったので正攻法かと思いますが、そうするとRecyclerAdapterをActivityから切り離している場合、Intentの発行ができません。setOnClickListenerをActivity側に書けばよいのかもしれませんが…
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> { // コンストラクタ public RecyclerAdapter(ArrayList<ListItem> data){ items = data; } @NonNull @Override public RecyclerViewHolder onCreateViewHolder(@NonNull final ViewGroup viewGroup, int i) { // レイアウトインフレータ LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); // ビューをインフレート View view = inflater.inflate(R.layout.row, viewGroup, false); // ビューホルダを生成 RecyclerViewHolder holder = new RecyclerViewHolder(view); // ビューのクリック検知 view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // インテントを発行したい } } ); return holder; }
RecyclerAdapterのonCreateViewHolderにsetOnClickListenerを置き、onClickでIntentを発行する方法について教えていただけないでしょうか。(上記コードでクリック位置を取得し、ログ表示するところまではうまくいっています。)
それはやはり不可能で、setOnClickListenerをActivity側に記述した方がよいという場合、クリック位置(position)を取得する方法についても教えていただけるとうれしいです。
追記
いただいた回答をもとにいろいろ試したところ、ふつうにIntentを渡せました。
putExtraも使えます。コンテキストを取得できればなんとでもなるんですね!
public RecyclerViewHolder onCreateViewHolder(@NonNull final ViewGroup viewGroup, int i) { ~中略~ view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Context context = view.getContext(); Intent intent = new Intent(context, ActivityPhotosDetail.class); intent.putExtra("name", "あああ"); context.startActivity(intent); } }); }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/27 13:08