【问题标题】:How to get specific position view in RecyclerView?如何在 RecyclerView 中获取特定位置视图?
【发布时间】:2021-10-03 19:56:36
【问题描述】:

我有一个recyclerView. One of recyclerView 项目有一个onClick 方法。在这个方法中,我setVisibility 为一个项目可见(默认不存在),也获取位置并将其添加到arrayList

点击:

public void onClickImageView(ImageView imageView, int position) {
    imageView.setVisibility(View.VISIBLE);
    positionArrayList.add(position);
}

在我去另一个活动之前,我想将 ImageView 可见性重置为默认值(消失),所以我使用接口将 positionArrayList 发送到 recyclerView 活动以按位置获取视图并重置 ImageViews默认。

界面:

public interface RecyclerViewMainActivityImp {
    void resetImageViewToDefault(ArrayList<Integer> positionArrayList);
}

我在适配器中使用接口方法的地方:

public void OnClickNextActivity() {
    Intent intent = new Intent();
    intent.setClass(context, ClassActivity.class);
    context.startActivity(intent);
    recyclerViewInterface.resetImageViewToDefault(positionArrayList);
}

活动:

@Override
public void resetImageViewToDefault(ArrayList<Integer> positionArrayList) {
    for (int position = 0; position < positionArrayList.size(); position++) {
        View row = binding.recyclerView.getLayoutManager().findViewByPosition(positionArrayList.get(position));
        ImageView imageView = row.findViewById(R.id.imageView);
        imageView.setVisibility(View.GONE);    
    }
}

当我滚动 recyclerView 时,如果某些项目不再在视图中,它们的视图将变为空,因此 positionArrayList 中的某些位置不再具有它们的视图。

我的问题是一些视图在滚动后为空,我不知道如何访问它们。

我在谷歌上搜索并找到了一些解决方案,但我无法解决我的问题

注意:我用过data binding

【问题讨论】:

  • adapter.notifyDataSetChanged()
  • @Pouria Hemati 不起作用
  • 我能想到的唯一方法是使用Binding Adapters 来控制可见性
  • 你能设置你的适配器代码吗?
  • @Amjad Alwareh 你是什么意思?

标签: android android-recyclerview data-binding android-adapter android-databinding


【解决方案1】:

任何重新启动的 Activity 都会首先执行其 onResume() 方法。 所以,请从onResume() 拨打notifyDataSetChanged()RcyclerView

@Override
public void onResume(){
    super.onResume();
    mAdapter.notifyDataSetChanged();

}
  

【讨论】:

  • 我做到了,但它不起作用,仍然没有重置
【解决方案2】:

您可以尝试解决方法,

在你的活动中创建一个函数

function void updateRecyclerView(position){
   yourArrayListForVisibility.set(position,'hide');
   mAdapter.notifyDataSetChanged();
}


@Override
public void onResume(){
    super.onResume();
    mAdapter.notifyDataSetChanged();

}

在意图之前在适配器中调用此函数,并在适配器中检查此 arraylist 值以隐藏或显示内容,始终将每个位置的默认值设置为“yourArrayListForVisibility”

【讨论】:

  • 我不使用arrayList来显示或隐藏项目
  • recyclerview 会在它们恢复可见时再次创建视图,因此如果您想维护任何视图的状态,请创建一个包含一些值的数组列表来定义该图像应该可见或隐藏并更新原始值当你想改变状态时
猜你喜欢
  • 2016-02-20
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多