У меня есть RecyclerView, который отображает серию представлений, полученных из базы данных. Я хочу подтвердить, что пользователь выбрал одно из видов, выделив его края, и мне это удалось. Если пользователь переходит к выбору варианта, я хочу удалить выделение в исходном выборе. Здесь я столкнулся с проблемой.Доступ к ViewHolder, непосредственно из RecyclerView, по положению
Первоначальная подсветка не была проблемой, поскольку я делал это, внутренне. Тем не менее, я не знаю, как получить доступ к предыдущему виду только с позиции адаптера. Я искал StackOverflow около часа, так как я не могу найти много возможностей в Android API или из Google. Многие пользователи, похоже, задают похожие вопросы, но в конечном итоге тонкие различия не дают никаких полезных ответов.
Внутри моей ViewHolder
, которая является внутренним public class
моего RecyclerView
, у меня есть OnClickListener
следующим образом:
@Override
public void onClick(View view) {
if(!selected) {
selected = true;
view.setBackgroundResource(R.drawable.default_selection_background);
} else {
selected = false;
view.setBackgroundResource(0);
}
UpdateSelected(getAdapterPosition());
}
Это указывает обратно на мой RecyclerView
, и, честно говоря, я еще добавить любой рабочий код мой UpdateSelected(int position)
способ.
Если это поможет, я намерен, чтобы он действовал так:
void UpdateSelected(int position) {
if(position != currentlySelected) {
ViewHolder[currentlySelected].Deselect();
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
...
public void Deselect() {
// and from here, I can go on as normal.
}
}
Я заметил пользователей советуя другим использовать getLayoutPosition()
вывести позицию для целей пользовательского интерфейса, если они специально не хотите продолжать работать с внутренние данные, которые я намерен делать.
Как мне получить доступ к определенному ViewHolder из моего RecyclerView, используя его положение?
Блестящий! работает как шарм. Там только изменения, которые я должен был сделать, были в 'onBindViewHolder', который сразу же имеет доступ к' view'. Я просто использовал 'viewHolder.itemView.setBackgroundResource (backgroundRes)'. Для эффективности я также только «notifyItemChanged» на 'previousSelection' и' currentSelection', но большое вам спасибо. – Gnemlock
Я также сталкиваюсь с той же проблемой. поэтому я пробую это решение, но не работал в моем случае. @Gnemlock –
Я просто наткнулся на этот ответ, и хотя хорошо, я бы предложил изменить 'notifyDataSetChanged()' на 'notifyItemChanged (selectedPosition)'. Рекомендуется избегать вызова 'notifyDataSetChanged()', когда вы можете указать адаптеру точно, какие представления необходимо обновить. –