Как передать строку в адаптере
У меня есть Adapter в котором из onBindViewHolder хочу передать строку в ViewHolder но я не пойму как это сделать, подскажите пожалуйста что нужно написать.
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
ItemAmmunitionTestRv Item = itemAmmunitionTestRvs.get(position);
holder.tv_ammunition.setText(Item.getAmmunitionName());
holder.string.(сюда нужно написать часть кода которая будет передавать его в ViewHolder)
должно быть что-то типа такого
holder.string.setText(Item.getAmmunitionRvFilter()); Но это не работает
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView tv_ammunition;
RecyclerView rv_ammunition;
String string;
private FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
private final CollectionReference collectionReference = firebaseFirestore.collection("Search");
AdapterAmmunition adapterAmmunition;
public ViewHolder(View itemView) {
super(itemView);
tv_ammunition = itemView.findViewById(R.id.tv_ammunition);
rv_ammunition = itemView.findViewById(R.id.rv_ammunition);
RecyclerViewAll(rv_ammunition, string);
}
public void RecyclerViewAll(RecyclerView recyclerView, String string) {
Query query = collectionReference.orderBy(string, Query.Direction.DESCENDING);
FirestoreRecyclerOptions<ItemSearch> firestoreRecyclerOptions = new FirestoreRecyclerOptions.Builder<ItemSearch>()
.setQuery(query, ItemSearch.class).build();
adapterAmmunition = new AdapterAmmunition(firestoreRecyclerOptions, context);
RecyclerView.LayoutManager RLM_ammunition_all = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
SnapHelper snapHelper = new GravitySnapHelper(Gravity.START);
snapHelper.attachToRecyclerView(recyclerView);
recyclerView.setHasFixedSize(false);
recyclerView.setLayoutManager(RLM_ammunition_all);
recyclerView.setNestedScrollingEnabled(true);
recyclerView.setAdapter(adapterAmmunition);
adapterAmmunition.startListening();
Objects.requireNonNull(recyclerView.getAdapter()).setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
}
}
Ответы (1 шт):
Автор решения: mrtwon
→ Ссылка
Используйте функцию bind во ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder {
TextView tv_ammunition;
RecyclerView rv_ammunition;
String string;
public void bind(String data){
// тут связываем данные с вашими view
// textView.setText(data) и т.д
}
public ViewHolder(View itemView) {
super(itemView);
tv_ammunition = itemView.findViewById(R.id.tv_ammunition);
rv_ammunition = itemView.findViewById(R.id.rv_ammunition);
RecyclerViewAll(rv_ammunition, string);
}
}
Вызывайте её через адаптер, в методе onBindViewHolder обращаясь к вашу холдеру
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
String example_data = "Your data";
holder.bind(example_data);
}
P.s советую почитать книгу "Android программирование для профессионалов", там описывают такие моменты