我从要在RecyclerView
中显示的服务器获取数据。首先,我得到一个列表,其中包含应检索数据的URL以及此数据应放在RecyclerView
内的位置。
我想在检索数据时立即显示数据,而不是等待检索所有数据。
例如,如果有一个列表项“url:www.url.com/data.php,postition:3”,我想从服务器检索这些数据并填充我RecyclerView
的第三行有这些数据。即使还没有第一和第二个元素。
现在我这样做:我现在需要检索多少个位置,我创建一个Adapter
,其中包含全部为空的numSections
个元素。像这样:
ArrayList<ContentPreviewSectionModel> emptySections = new ArrayList<>();
while(emptySections.size() < numSections) emptySections.add(null);
RecyclerView contentPreviewList = (RecyclerView) findViewById(R.id.content_preview_list);
contentPreviewListAdapter = new RecyclerViewDataAdapter(this, this, emptySections);
contentPreviewList.setAdapter(contentPreviewListAdapter);
当我检索到一个URL的内容时,我更新了RecyclerView,如下所示:
@Override
public void setSectionContentRetrieved(int position, ContentPreviewSectionModel content,) {
contentPreviewListAdapter.addItemAtPosition(content, position);
contentPreviewListAdapter.notifyDataSetChanged();
}
addItemAtPosition
只是适配器数据结构上的arrayList.set(position, content)
。
我想知道这是否是实现我想要的最简单方法?谢谢。
答案 0 :(得分:4)
contentPreviewListAdapter.notifyDataSetChanged()
取而代之的
你应该使用:
contentPreviewListAdapter.notifyItemInserted(position);
(当您想在所需位置添加项目时)
并使用:
contentPreviewListAdapter.notifyItemInserted(emptySections.size() - 1);
(当你想在最后添加项目时)
注意:
在致电addItemAtPosition()
并且不致电notifyDataSetChanged()
希望这能解决您的问题。
答案 1 :(得分:0)
只需致电yourAdapter.notifyItemInserted(position)
,其中position
是您在recyclerview中插入商品所需的位置。