微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

渲染时Android数据绑定滞后

我正在使用 Android数据绑定与RecyclerView.Adapter.
在适配器的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)之后;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐