@dimasik100200

Как по нажатию элемента recycler view открыть fragment?

У меня в activity есть фрагмент с recycler view (вертикальный список). Как сделать так, чтобы по нажатию любого элемента в этом списке открывался другой фрагмент?
Вот код адаптера recycler view.
public class MessagesAdapter extends RecyclerView.Adapter<MessagesAdapter.ViewHolder> {

    private MessagesFragment mContext;
    private ArrayList<MessagesObject> MessagesArrayList;

    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView name, description, timestamp, count;
        public ImageView avator;

        public ViewHolder(View view) {
            super(view);
            avator = (ImageView)itemView.findViewById(R.id.item_chat_avatar);
            name = (TextView) itemView.findViewById(R.id.dialog_title);
            description = (TextView) itemView.findViewById(R.id.dialog_message);
            timestamp = (TextView) itemView.findViewById(R.id.item_chat_date);
            count = (TextView) itemView.findViewById(R.id.item_chat_unread_count);
        }
    }


    public MessagesAdapter(MessagesFragment mContext, ArrayList<MessagesObject> MessagesArrayList) {
        this.mContext = mContext;
        this.MessagesArrayList = MessagesArrayList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_messege, parent, false);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        MessagesObject songs = MessagesArrayList.get(position);
        Glide.with(mContext).load(R.drawable.a_avator).into(holder.avator);
        holder.name.setText(songs.getMessagesName());
        holder.description.setText(songs.getMessagesDescription());
        holder.timestamp.setText(songs.getMessagesTime());
        holder.count.setText(songs.getMessagesUnread());
    }

    @Override
    public int getItemCount() {
        return MessagesArrayList.size();
    }
}

  • Вопрос задан
  • 639 просмотров
Пригласить эксперта
Ответы на вопрос 1
Есть несколько вариантов:
1. Хороший способ. Нужно передать в конструктор RecyclerView какой-нибудь listener, метод которого будет вызываться по клику на элемент в списке.
2. Плохой способ. Можно предположить, что контекстом вьюх в RecyclerView является какая-то определенная активити. Пусть это будет MainActivity, например. Тогда мы можем привести контекст View v из OnClickListener'а к типу MainActivity и там уже вызвать публичный метод MainActivity, который что-то сделает с фрагментами. Ну, либо напрямую брать FragmentManager из Activity и что-то делать.
itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                  // Вот здесь ((MainAcivity)(v.getContext())).yourFunction
            }
        });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы