#android #android-recyclerview #textview #fragment
#Android #android-recyclerview #textview #фрагмент
Вопрос:
Согласно изображению, в моей основной деятельности я использовал фрагмент, и внутри этого фрагмента есть горизонтальный RecyclerView с некоторым CardView (4 показано на рисунке ниже). Текстовое представление находится вне RecyclerView в родительском фрагменте. Что я хочу, так это получить доступ к текстовому представлению из RecyclerView, т. Е. Если я щелкну карточку внутри RecyclerView, соответствующий текст карточки отобразится в TextView.
Пример: если я нажму CardView2, текст TextView будет «card2″….Если я нажму CardView3, текст TextView будет «card3»
Это мой класс адаптера:
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 с помощью параметра.