我有一个 RecyclerView,它显示一系列从数据库派生的 View 。我希望通过突出显示 View 的边缘来确认用户已选择其中一个 View ,并且我已经成功地做到了这一点。如果用户继续选择不同的选项,我希望删除原始选择上的突出显示。这就是我遇到了一些麻烦的地方。
最初的亮点并不麻烦,就像我在内部所做的那样。但是,我不知道如何仅通过其适配器位置访问先前的 View 。我已经在 StackOverflow 上搜索了大约一个小时,因为我在 Android API 或 google 中找不到太多内容。许多用户似乎都在问类似的问题,但最终,细微的差异无法提供任何有用的答案。
在我的ViewHolder
(这是我的RecyclerView
的内部公共(public)类
)中,我有一个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(intposition)
方法添加任何工作代码。
如果有帮助,我打算让它像这样运行:
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()
来导出用于 UI 目的的位置,除非他们特别希望继续使用内部数据,这正是我打算做的。
如何使用其位置从 RecyclerView 访问特定 ViewHolder?
最佳答案
你可以做这样的事情。
在您的适配器中,创建一个成员变量来跟踪所选项目的位置。
int selectedPosition = -1; // -1 some default value for nothing selected
然后在回收器 View 适配器的onBindViewHolder
中
int backgroundRes = (position == selectedPosition)? R.drawable.default_selection_background : 0;
view.setBackgroundResource(backgroundRes);
最后在你的viewholder的onClick中
@Override
public void onClick(View view) {
selectedPosition = getAdapterPosition();
notifyDataSetChanged();
}
关于java - 按位置直接从 RecyclerView 访问 ViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39829829/