我有一个布局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(使用前将#替换为@)