RecyclerView:在位置添加项目

时间:2016-07-01 07:56:16

标签: android android-recyclerview

我从要在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)

我想知道这是否是实现我想要的最简单方法?谢谢。

2 个答案:

答案 0 :(得分:4)

使用contentPreviewListAdapter.notifyDataSetChanged()

取而代之的

你应该使用:
contentPreviewListAdapter.notifyItemInserted(position);

(当您想在所需位置添加项目时)

并使用:
contentPreviewListAdapter.notifyItemInserted(emptySections.size() - 1);

(当你想在最后添加项目时)

注意:     在致电addItemAtPosition()并且不致电notifyDataSetChanged()

之后执行此操作

希望这能解决您的问题。

答案 1 :(得分:0)

只需致电yourAdapter.notifyItemInserted(position),其中position是您在recyclerview中插入商品所需的位置。