Я хочу обновить дочернее значение, когда пользователь получит доступ к каждому элементу просмотра recyclerview.
Предположим, у меня есть узел «Пользователи» в базе данных firebase. и у него есть три дочерних элемента с именами «Название», «Описание» и «количество», как это
{
Users:
"UID":
"Title":"..."
"Description":"..."
"count":"..."
{
И чтобы получить значение этого дочернего элемента, я реализую код
@Override
protected void onBindViewHolder(ViewHolder holder, final int position, Model model) {
holder.setTxtTitle(model.getmTitle());
holder.setTxtDesc(model.getmDesc());
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, String.valueOf(position), Toast.LENGTH_SHORT).show();
}
});
}
Теперь я хочу обновить значение «счетчика», ТОЛЬКО КОГДА элемент просмотра появляется на экране. Предположим, у меня есть 5 узлов UID в узле Users, поэтому я получу 5 itemview. когда пользователи загружают эти все 5 uid
если пользователь В НАСТОЯЩЕЕ ВРЕМЯ видит 1 элемент, обновите только его дочернее значение «count». если пользователь В НАСТОЯЩЕЕ ВРЕМЯ видит 2 элемента, чем обновить только дочернее значение «count».
Короче говоря, значение «Количество» изменяется только тогда, когда при прокрутке на экране появляется элемент.
да, это именно то, что я прошу
Я хочу обновить значение счетчика для каждого элемента на экране видимости
@Hari N Jha, пожалуйста, помогите




Я попытался представить логику, но у меня не было возможности запустить ее. Я пытался писать в редакторе notepad ++, поэтому не уверен, что синтаксическая ошибка будет отображаться в AndroidStudio, но логика будет аналогична этой.
private RecyclerView list;
private adapter recyclerAdapter;
private LinearLayoutManager layoutManager;
private int visibleItemCount, totalItemCount, firstVisibleItemPosition, lastVisibleItem;
private int oldFirstVisibleItemPos = -1, oldLastVisibleItemPos = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler_view5);
recView = (RecyclerView) findViewById(R.id.list);
layoutManager = new LinearLayoutManager(this);
recView.setLayoutManager(layoutManager);
recyclerAdapter = new adapter(RecyclerViewActivity5.this, country);
recView.setAdapter(recyclerAdapter);
recView.addOnScrollListener(onScrollListener);
firstVisibleItemPosition = layoutManager.findFirstCompletelyVisibleItemPosition();
lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition();
updateVisibleItem();
}
private RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
visibleItemCount = layoutManager.getChildCount();
totalItemCount = layoutManager.getItemCount();
firstVisibleItemPosition = layoutManager.findFirstCompletelyVisibleItemPosition();
lastVisibleItem = firstVisibleItemPosition +visibleItemCount;
Toast.makeText(RecyclerViewActivity5.this, "Visible Item Total:"+String.valueOf(visibleItemCount), Toast.LENGTH_SHORT).show();
updateVisibleItem();
}
};
private void updateVisibleItem() {
if (oldFirstVisibleItemPos == -1 && lastVisibleItem == -1) {
oldFirstVisibleItemPos = firstVisibleItemPosition;
oldLastVisibleItemPos = lastVisibleItem;
} else if (firstVisibleItemPosition < oldFirstVisibleItemPos){
if (lastVisibleItem < oldFirstVisibleItemPos)
oldLastVisibleItemPos = lastVisibleItem;
else
oldLastVisibleItemPos = oldFirstVisibleItemPos -1;
oldFirstVisibleItemPos = firstVisibleItemPosition;
} else {
if (firstVisibleItemPosition > oldLastVisibleItemPos)
oldFirstVisibleItemPos = firstVisibleItemPosition;
else
oldFirstVisibleItemPos = oldLastVisibleItemPos + 1;
oldLastVisibleItemPos = lastVisibleItem;
}
for(int i = oldFirstVisibleItemPos; i <= oldLastVisibleItemPos; i++) {
Model model = list.get(i);
model.setCount(model.getCount() + 1);
}
}
Здесь список — это представление списка вашей модели, и каждая модель будет иметь счет как переменную. Метод updateVisibleItem() используется для обновления счетчика элементов путем исключения перекрывающихся видимых элементов экрана.
Я надеюсь, что это поможет вам выполнить ваше требование.
Я не уверен, что именно вы хотите, но я предполагаю, что есть список UID, и каждый UID является элементом RecyclerView. Теперь у меня есть вопрос, хотите ли вы обновить значение счетчика для каждого элемента на экране видимости или после использования взаимодействия с пользователем, такого как событие щелчка или что-то в этом роде? Если на экране видимость, то будет ли значение счетчика UID обновляться каждый раз, когда прокрутка будет переносить элемент в область видимости экрана при прокрутке вверх и вниз?