内部RecyclerView項目に取り組んでいない私のアプリケーションは、以下の構造を使用しています:クリックして、フラグメント
Activity > ViewPager > FragmentStatePagerAdapter > Fragment > RecyclerView
を私は過去にかなり楽にRecyclerViewsを使用してきたが、いくつかの理由のために私はクリックを登録するには私のRecyclerViewアイテムを取得することはできませんフラグメント内に配置されたイベント私のViewHolderは次のとおりです:
// ViewHolder Class for ExhibitAdapter
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView itemTitleTextView;
public TextView itemDescriptionTextView;
public NetworkImageView itemCoverPhoto;
public ViewHolder(View itemView) {
super(itemView);
itemCoverPhoto = (NetworkImageView) itemView.findViewById(R.id.exhibitThumbnailNIV);
itemTitleTextView = (TextView) itemView.findViewById(R.id.exhibitNameTV);
itemDescriptionTextView = (TextView) itemView.findViewById(R.id.exhibitDescriptionTV);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
try {
Log.d(TAG, "Exhibit clicked");
Exhibit currentExhibit = exhibits.get(getAdapterPosition());
intent.putExtra(ExhibitContentActivity.EXHIBIT_ID , currentExhibit.getId());
intent.putExtra(ExhibitContentActivity.EXHIBIT_COVER_URL , currentExhibit.getCoverPhotoUrl());
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation((Activity) adapterContext, itemView.findViewById(R.id.exhibitThumbnailNIV), "profile");
Log.i(TAG, "Attempting to launch detail activity with exhibit id: " + currentExhibit.getId());
adapterContext.startActivity(intent, options.toBundle());
}
catch(IndexOutOfBoundsException e) {
Log.e(TAG, "* Error: Adapter position exceeded the no. of items.");
}
}
}
助けてください。フラグメントインタラクションリスナーを作成するにはhttps://guides.codepath.com/android/Creating-and-Using-Fragments#fragment-listenerの手順に従ってみましたが、RecyclerViewのアダプタ内でこれをどのように実装するのか分かりません。前もって感謝します!
あなたはこれに対する解決策を見つけましたか? –
@MichaelA。ええ、問題は単純に1でした。私のアイテムのレイアウトは、描画には時間がかかりすぎていました.2私はViewHolderクラス内でonClickロジックを処理していました。私はフラグメント内にリスナー・インターフェースを作成し、そのリスナーのonMyItemClickメソッドをViewHolderのonClickで呼び出し、メイン・アクティビティーでそのリスナーを実装することで解決しました。これにより、アイテムがクリックされたときに何をすべきかを定義し、クリックイベントを主なアクティビティに効率的にバブリングすることができました。 –