我正在使用
Android数据绑定与RecyclerView.Adapter.
在适配器的onCreateViewHolder上我调用:
在适配器的onCreateViewHolder上我调用:
public TransfersViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { return new MyViewHolder( ListItemmyDataBinding.inflate( LayoutInflater.from(parent.getContext()),parent,false)); }
所以ListItemmyDataBinding是list_item_my_data.xml的表示.
适配器的onBindViewHolder看起来像这样:
@Override public void onBindViewHolder(final MyViewHolder holder,int position) { MyData myData = mDataList.get(position); holder.render(myData); .... }
最后,我的MyViewHolder的渲染功能如下所示:
public void render(MyData data,boolean expand) { mBinding.setData(data); // mBinding is an instance of ListItemmyDataBinding }
在我的xmls中有一些数据绑定:
<data> <import type="com.example.MyData" /> <variable name="data" type="MyData" /> </data> ... <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{data.userName}" />
我在一个可搜索的列表中使用这种方法,所以我在列表顶部有一个搜索字段.一旦用户输入新的搜索词,列表就会被清除并通知有关更改,一旦响应从服务器返回,我将所有结果添加到列表中并再次通知更改.
最后问题是发生以下情况:
>输入新的搜索词:清除列表,删除项目[确定]
>响应从服务器返回[确定]
>我将所有项目添加到列表中并通知适配器有关更改[确定]
>在一小段时间内,旧值出现在列表中,列表项将仅在[NOT]之后使用新值更新
据我所知,这是因为视图被重用,作为第一步,适配器意识到它可以重用视图并显示它,并且在应用布局中的更改(通过数据绑定)之后(仅几分之一秒),这就是为什么我看到旧的价值观闪烁的原因.这很烦人.
如果在函数渲染中我手动设置视图的默认值(例如TextViews上的setText(“”)),那么我看不到闪烁效果,但这不是我想要的解决方案.
你有什么建议我怎么能很好地避免这种“眨眼/滞后”效应,我做错了什么?
谢谢
解决方法
呼叫
mBinding.executePendingBindings ();
就在mBinding.setData(data)之后;