【问题标题】:RecyclerView lost its item position when scrolledRecyclerView 在滚动时丢失了它的项目位置
【发布时间】:2018-12-04 05:51:42
【问题描述】:

我目前正在我的项目中实现RecyclerView。当我在RecyclerView 上设置项目并滚动时,我失去了它的位置。

我使用一些 if 和 else 条件来单击并更改文本的颜色,但是当我不滚动 RecyclerView 项目时它会发生变化。 请建议我如何处理这种情况的正确方法。

adapter.setOnItemClickListner(new LoadVehicleTypeAdapter.setOnitemclick() {
@Override
public void ImageClick(int position, String Name,String Description,int id) {
    LinearLayout linearLayout = null;
    CustomTextView customTextView = null;
    try {
        for (int i = 0; i < messages.size(); i++) {
            linearLayout = (LinearLayout) rvVehicleTypes.getChildAt(i).findViewById(R.id.root1);
            customTextView = (CustomTextView) rvVehicleTypes.getChildAt(i).findViewById(R.id.frag_cartypes_inflated_name);
            if (i==position) {
                linearLayout.setBackgroundColor(Color.parseColor("#999999"));
                customTextView.setTextColor(Color.parseColor("#FFFFFF"));


            } else {
                linearLayout.setBackgroundColor(Color.parseColor("#f3f3f3"));
                customTextView.setTextColor(Color.parseColor("#2196F3"));
            }
        }
        //Toast.makeText(getActivity(),Name, Toast.LENGTH_SHORT).show();
    }
    catch (Exception e)
    {

    }
}

});

【问题讨论】:

  • 没有看到代码就无法提出任何建议
  • @Vivek 我会更新问题的代码。
  • @Radhey 我这边有同样的问题,您将在评论的 URL 中提到,但在我的情况下,我将更改点击中文本的颜色。现在我没有办法解决这个问题请告诉我?
  • 你可以试试这个链接解决bug [stackoverflow.com/a/53664672/8348768]

标签: android scroll android-recyclerview


【解决方案1】:

您似乎是 Android 开发领域的新手,带着这个假设让我带您完成从 ListView 到 RecyclerView 的旅程。

ListView,我们习惯于遵循 ViewHolder 模式来管理滚动列表视图时被回收的项目。

现在 RecyclerView 具有内置功能,而不是内置功能,但您必须强制实现它,我说的是 onCreateViewHolderonBindViewHolder

所以现在让我们先一步了解它的工作原理,一旦您开始向下滚动列表,膨胀的项目视图就会开始回收,而您之前膨胀的 ViewHolder(实际上是在 onCreateViewHolder 中创建的)被重用。

现在要解决这个问题,你必须记住位置,就像我们大多数人过去使用SparseBooleanArray一样

【讨论】:

  • @Paresh 我还将创建一个回收视图适配器类,其中包括 onCreateViewHolder 和 onBindViewHolde。当我滚动回收视图时会出现问题,那时我将单击第 6 项然后显示单击第 8 项?
  • @MohitLakhanpal 现在我实际上期待您完成对我分享的文字的研究。你会得到解决方案的!
  • 我不会在使用滚动视图时更改文本的颜色,否则它会为我完成。
【解决方案2】:

请阅读RecyclerView的文件。另外,我鼓励您阅读ListViewRecyclerView 之间的区别

您使用的是RecyclerView 还是ListView?从您的代码看来,您正在使用ListView

如果您想使用RecyclerView,请阅读教程。

请浏览this 教程。它将告诉你如何使用 RecyclerView。 对于点击监听器,请遵循 this 教程。

【讨论】:

  • 这个链接没有帮助我请分享另一个与我的问题相关的链接
  • 你能具体告诉我你的要求吗?
  • 我将使用回收视图水平设置项目,我需要在单击项目时更改布局背景颜色和文本颜色。有时会这样做,有时它不会改变。
  • 使用 RecyclerView 管理器作为具有水平的 LinearLayoutManager。要更改颜色,请在BindViewHolder() 方法中更改颜色。也可以使用ContextCompact.setColor 更改布局颜色。
  • 我会将此代码用于 BindViewHolder() 方法,但如果条件 if(I==position){ holder.llRoot.setBackgroundColor(Color .parseColor("#999999")); holder.mCarType.setTextColor(Color.parseColor("#ffffff")); } else { holder.llRoot.setBackgroundColor(Color.parseColor("#f3f3f3")); holder.mCarType.setTextColor(Color.parseColor("#2196F3")); }
猜你喜欢
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多