Как получить доступ к текстовому представлению вне RecyclerView в Android?

#android #android-recyclerview #textview #fragment

#Android #android-recyclerview #textview #фрагмент

Вопрос:

Согласно изображению, в моей основной деятельности я использовал фрагмент, и внутри этого фрагмента есть горизонтальный RecyclerView с некоторым CardView (4 показано на рисунке ниже). Текстовое представление находится вне RecyclerView в родительском фрагменте. Что я хочу, так это получить доступ к текстовому представлению из RecyclerView, т. Е. Если я щелкну карточку внутри RecyclerView, соответствующий текст карточки отобразится в TextView.

Пример: если я нажму CardView2, текст TextView будет «card2″….Если я нажму CardView3, текст TextView будет «card3»

доступ к текстовому просмотру вне recyclerview

Это мой класс адаптера:

 public class ScanCodeSliderAdapter extends RecyclerView.Adapter<viewHolder> {

    private List<ScanCodeCardModel> scanCodeCardModels;
    private Context context;


    public ScanCodeSliderAdapter(List<ScanCodeCardModel> scanCodeCardModels, Context context) {
        this.scanCodeCardModels = scanCodeCardModels;
        this.context = context;
    }

    @NonNull
    @Override
    public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_scan_code_card_item, parent, false);
        return new viewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final viewHolder holder, final int position) {
       
        holder.scanCodeSingleItemCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Toast.makeText(context, "" position, Toast.LENGTH_SHORT).show();

            }
        });
    }

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

}
  

Это мой класс ViewHolder:

 public class viewHolder extends RecyclerView.ViewHolder {

    public CardView scanCodeSingleItemCardView;

    public viewHolder(@NonNull View itemView) {
        super(itemView);
        
        scanCodeSingleItemCardView = itemView.findViewById(R.id.scanCodeSingleItemCardView);
    }


}
  

Что еще я могу добавить сюда, чтобы сделать это?

Комментарии:

1. добавьте прослушиватель кликов в каждое представление карты и управляйте обратными вызовами или каким-либо другим способом

Ответ №1:

Лучший способ сделать это — с помощью прослушивателя кликов, который позволит вам настроить связь между вашими элементами RecyclerView и виджетами или представлениями за пределами представления recycler.

Чтобы настроить прослушиватель, вы можете использовать этот пример в качестве руководства:

 interface OnItemsClickListener{
     void onItemClick(ScanCodeCardModel scanCodeCardModels);
}
  

затем создайте переменную прослушивателя внутри вашего класса адаптера:

 private OnItemsClickListener listener  = null;
  

и общедоступный метод, который будет обрабатывать или выполнять прослушивание между вашей активностью или фрагментом и адаптером RecyclerView следующим образом

 void setOnItemClickListener(OnItemsClickListener listener){
     this.listener = listener;
}
  

теперь вернитесь в свой onBindViewHolder внутри метода переопределения onClick()

  @Override
public void onBindViewHolder(@NonNull final viewHolder holder, final int position) {
   
    ScanCodeCardModels item =  scanCodeCardModels[position]

    holder.scanCodeSingleItemCardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           // Toast.makeText(context, "" position, Toast.LENGTH_SHORT).show();
           if(listener != null){
               listener.onItemClick(item)
           }
        }
    });
}
  

это все, что вам нужно сделать внутри вашего класса адаптера.
Затем перейдите к своему фрагменту или классу Activity,
и подключиться к прослушивателю

 adapter.setOnItemClickListener(new AdapterName.OnItemClickListener(){
      @Override
      public void onItemClick(ScanCodeCardModel scanCodeCardModels){
           //Set your TextView here when card is Clicked on
           textView.setText(scanCodeModels.name)
      }
})
  

И это все.

Комментарии:

1. Спасибо, это именно то, что я хотел. Хотя еще один вопрос… Что на самом деле происходит в «‘if(listener != 0){слушатель. onItemClick(элемент);}»‘.

2. Во-первых, условие состоит в том, чтобы убедиться, что прослушиватель был инициализирован, и он не равен null, и когда это верно, мы вызываем onItemClick (item), передавая наш текущий выбранный элемент в качестве параметра для активности, прослушивающей это событие, чтобы использовать

3. @JeetNath вы можете прочитать больше здесь antonioleiva.com/recyclerview-listener

Ответ №2:

попробуйте добавить метод onclick, который будет обращаться к объекту TextView с помощью findViewById и устанавливать текст на нем. Метод OnClick будет иметь атрибут View view, чтобы вы могли использовать его, чтобы узнать, какой элемент был нажат.

У вас также должен быть какой-либо arrayadapter для вашего представления recycler, вы можете добавить туда несколько методов onclick, которые будут использовать mainactivity в качестве прослушивателя.

Ответ №3:

Создайте общедоступный метод в классе fragment. с параметром в виде строки.
Теперь в разделе recyclerview щелкните textview. вызовите метод класса fragment с его контекстом. например. context.methodName(параметр).
и в общедоступном методе задайте текст textview с помощью параметра.