更新在RecyclerView(交换)中大量转移的项目以及即时用户反馈有什么好的实现?

时间:2016-02-10 14:19:36

标签: android synchronization adapter android-recyclerview

目标(S)

  • 1:轻松更新动态项目。

    • 实施例:
      • 我从API返回List<T>,我在RecyclerView.Adapter中使用该列表。用户滑动以刷新,并从包含一些新项目和一些更新旧项目的API返回一个新列表。现在旧的列表需要删除重复的项目。
    • 注意:假设所有项目都有updated属性,如果用户与之互动,则该属性可能会发生变化。
  • 2:即时用户反馈(这可能与目标#1相关)。

    • 实施例:
      • 要在RecyclerView.Adapter中插入新项目,首先需要在API中创建。实现同时在RecyclerView.Adapter和API中创建对象。当从API返回新对象时,先前立即注入到RecyclerView.Adapter&#34;同步&#34;使用API​​响应。这样用户就能看到即时反馈。

代码示例:

对于目标#1,我真的没有任何想法,但对于目标2我可能在我的ViewHolder内部想到这样的事情? (我听说Viewholders中的更新/同步模型通常不是一个好的做法,因为查看者可以回收):

// JAVA 7
private void createNewObjectToBeInsertedIntoRecyclerView(String data) {

    // Pass callback to API and at the same time insert object into adapter
    mAdapter.addNewObject(data);
    mPresenter.createObject(new SyncRequestCallback() {
        @Override
        public void onSuccessFromAPI(ModelObject model) {
            mAdapter.updateObject(model);
        }
    });
}

// JAVA 8
private void createNewObjectToBeInsertedIntoRecyclerView(String data) {

    // Pass callback to API and at the same time insert object into adapter
    mAdapter.addNewObject(data);
    mPresenter.createObject((sync) -> { mAdapter.updateObject(model); });
}

这只是我的头脑,它绝对容易出错。

我如何实现这一目标?

在这里寻找一个强大的解决方案,但不涉及内容提供商(如果可能的话)。

1 个答案:

答案 0 :(得分:-1)

您不应该在ViewHolder中执行此类操作,只需将从API获取的数据绑定到UI。

你应该做的是对Adapter

进行操作
  1. 当新的List<T>从API返回时,只需将适配器中的旧列表指向此新列表(oldList = newList)并调用mAdapter.notifyDataSetChanged()
  2. 你可以像第1点那样做,但这样可以更新整个Adapter。如果您知道Adapter中您插入该项目的位置(我假设您知道),请致电mAdapter.notifyItemInserted(position),或者如果您已经创建了Adapter,请致电{{ 1}}