java - 按位置直接从 RecyclerView 访问 ViewHolder

标签 java android android-recyclerview android-viewholder

我有一个 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/

相关文章:

java - 将多个嵌套列表压缩在一起

java - 如何组合 3 个或更多 CompletionStages?

java - 在打印 JTable 时对齐消息格式

android滚动完整的RelativeLayout而不仅仅是RecyclerView

Android RecyclerView 不出现在 EditText 下面

java - 安卓工作室。类别搜索停止工作。 (导航 -> 类...)

android - 接收下载管理器下载完整的 Intent 并比较 id - android

android - 是否可以减少 Android 中显示的通知时间?

java - 使用 recyclerview "No Adapter Attached"设置适配器时即将到来

android - Recyclerview 按屏幕位置 x/y 获取项目