Здравствуйте, исходные данные.
Стандартное меню DrawerLayout & NavigationView, к пунктам меню привязаны фрагменты, которые отображаются в FrameLayout.
Фрагмент отображаемый в FrameLayout состоит из CardView в связке с RecyclerView. Связку между ними осуществляет адаптер который наследуется от RecyclerView.Adapter с указанием класса, который будет хранить ссылки на виджеты элемента списка, т.е. класса, реализующего ViewHolder. Также есть слушатель, который отвечает за обработку щелчка по CardView.
Как можно в этом слушателе реализовать замену в FrameLayout, фрагмента с CardView на другой фрагмент? Чтобы CardView менялся на фрагмент в FrameLayout, по которому кликнули.
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ContentViewHolder> {
public static class ContentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
CardView cv;
TextView cvTitle;
TextView cvContent;
ImageView cvPhoto;
public ContentViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cv);
cvTitle = (TextView) itemView.findViewById(R.id.text_title);
cvContent = (TextView) itemView.findViewById(R.id.text_content);
cvPhoto = (ImageView) itemView.findViewById(R.id.text_photo);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (getAdapterPosition()) {
case 0:
break;
case 1:
break;
case 2:
break;
}
Log.i("RecyclerView", "Вы щёлкнули на позиции " + getAdapterPosition());
}
}
List<CardContent> mCardContents;
public RVAdapter(List<CardContent> mCardContents) {
this.mCardContents = mCardContents;
}
@Override
public int getItemCount() {
return mCardContents.size();
}
@Override
public ContentViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
ContentViewHolder pvh = new ContentViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(ContentViewHolder contentViewHolder, int i) {
contentViewHolder.cvTitle.setText(mCardContents.get(i).title);
contentViewHolder.cvContent.setText(mCardContents.get(i).content);
contentViewHolder.cvPhoto.setImageResource(mCardContents.get(i).photoId);
//Log.i("RecyclerView", "Позиция " + i);
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
}