私が基本的にやろうとしているのは、リストのアルバムカバーとその横にタイトルを表示するプログラムを作成しているため、リサイクラービューに表示されるオブジェクトを特定のTextViewIDにクリック可能にすることです。リサイクラービューが作成する各ボックスをクリックし、クリックしたときに他の情報(作成者、公開日、ヒット曲など)を含むTextViewをポップアップさせてから、戻るボタンを表示できるようにする必要があります(可能)アルバムリストに戻る。私はこれを何時間も見てきましたが、OnclickListenerを機能させる方法がわかりません。あなたが方法を知っているか、何か提案があれば、それらを聞いてうれしいです。ありがとうございました!
package com.albumlist.albumlist;
import Android.content.Context;
import Android.content.Intent;
import Android.support.v7.widget.RecyclerView;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ImageView;
import Android.widget.TextView;
import Android.widget.Toast;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private AlbumData[] itemsData;
public MyAdapter(AlbumData[] itemsData){
this.itemsData = itemsData;
}
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView txtViewTitle;
private ImageView imgViewIcon;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
itemLayoutView.setOnClickListener(this);
txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.album_title);
imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.album_icon);
}
@Override
public void onClick(View v) {
}
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
View itemLayoutView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.data_layout, null);
ViewHolder viewHolder = new ViewHolder(itemLayoutView);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.txtViewTitle.setText(itemsData[position].getTitle());
viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl());
}
@Override
public int getItemCount() {
return itemsData.length;
}
}
コンセプトはコメントの中でXaver Kapellerによってよく要約されています。 RecyclerView
の従来のインタラクションと同様のListView
インタラクションを管理する簡単な方法を探している場合は、GitHubの BigNerdRanchのrecyclerview-multiselect ライブラリを確認してください。探索できるサンプルアプリがあり、複数選択の機能が追加された一連のOnClickListeners
とOnLongClickListeners
を実装しています。
これは、BigNerdRanchがFragment
とAdapter
にまたがるViewHolder
にリスナーを実装する方法のスニペットです。この場合、これは実際にはライブラリ自体のSwappingHolder.
の拡張です。
public CrimeHolder(View itemView) {
super(itemView, mMultiSelector);
mTitleTextView = (TextView) itemView.findViewById(R.id.crime_list_item_titleTextView);
mDateTextView = (TextView) itemView.findViewById(R.id.crime_list_item_dateTextView);
mSolvedCheckBox = (CheckBox) itemView.findViewById(R.id.crime_list_item_solvedCheckBox);
itemView.setOnClickListener(this);
itemView.setLongClickable(true);
itemView.setOnLongClickListener(this);
}
public void bindCrime(Crime crime) {
mCrime = crime;
mTitleTextView.setText(crime.getTitle());
mDateTextView.setText(crime.getDate().toString());
mSolvedCheckBox.setChecked(crime.isSolved());
}
@Override
public void onClick(View v) {
if (mCrime == null) {
return;
}
if (!mMultiSelector.tapSelection(this)) {
selectCrime(mCrime);
}
}
@Override
public boolean onLongClick(View v) {
((AppCompatActivity) getActivity()).startSupportActionMode(mDeleteMode);
mMultiSelector.setSelected(this, true);
return true;
}
}
private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> {
@Override
public CrimeHolder onCreateViewHolder(ViewGroup parent, int pos) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_crime, parent, false);
return new CrimeHolder(view);
}
@Override
public void onBindViewHolder(CrimeHolder holder, int pos) {
Crime crime = mCrimes.get(pos);
holder.bindCrime(crime);
Log.d(TAG, "binding crime" + crime + "at position" + pos);
}
@Override
public int getItemCount() {
return mCrimes.size();
}
}