RecyclerView 仅在滚动时更新

2024-04-06

我有一个布局RecyclerView使用适配器:

public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleViewHolder> {

  protected List<JSONObject> data = new ArrayList<>();

  public List<JSONObject> getData() { return data; }
}     

我更新它的适配器,如下所示:

public void udpdateFromJson( JSONObject payload ) {
  JSONArray msgs = payload.optJSONArray( "messages" );
  for( int ix = 0; null != msgs && ix < msgs.length(); ix++ ){
    JSONObject o = msgs.optJSONObject( ix );
    if( loadingMore ) adapter.getData().add( 1 + ix, o );
    else adapter.getData().add( o );
  }

  adapter.notifyDataSetChanged();
  recyclerView.invalidate();
}

问题是,只有当我触摸或滚动视图时我才能看到新项目。

我缺少什么?

UPDATE:

为了解决这个问题,我更换了线路

adapter.notifyDataSetChanged();
recyclerView.invalidate();

with

adapter.notifyItemRangeInserted( loadingMore ? 1 : 0, msgs.length() );

它起作用了


您很可能正在打电话notifyDataSetChanged来自后台线程。

您可以做的简单(且丑陋)修复是使用:

recyclerView.post(new Runnable(){ @Override public void run(){ adapter.notifyDataSetChanged(); } });

If notifyDataSetChanged从主线程正确调用,然后更新列表而不触及它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RecyclerView 仅在滚动时更新 的相关文章

随机推荐