在noifydatasetChanged()之后,recyclerview的findViewByPosition()显示为null

时间:2018-01-04 08:00:52

标签: android android-recyclerview findviewbyid

我有recyclerview因为我需要为第一项&{39} button着色。

以便我在notifyDataSetChanged()

之后使用以下方式
View viewItem = rvProductList.getLayoutManager().findViewByPosition(0);

viewItem正在获得null

有没有办法获得第一项?

1 个答案:

答案 0 :(得分:1)

也许位置0的视图在某个位置被回收。如果你想清楚地测试它。在两种情况下检查null viewItem:

  1. 当您看到第1项时,将循环播放视图向上滚动到顶部。然后调用它并检查null

    View viewItem = rvProductList.getLayoutManager().findViewByPosition(0);
    
  2. 向下滚动直至第1项对您不可见,采取与案例1相同的操作并再次检查null。
  3. 更新解决方案: 解决方案设置标志,以便知道何时要为第一个项目着色。并在onBindViewHolder()方法中执行此操作

    @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        // I suppose that flag is true then we color 1st item
        if(position == 0 && flag) {
            // color your button here
        } else {
           // ...
        }
    }
    

    希望有所帮助!