【问题标题】:Update Dataset inside Fragment/Activity or directly in the adapter在 Fragment/Activity 或直接在适配器中更新数据集
【发布时间】:2016-04-18 16:54:21
【问题描述】:

我注意到处理列表适配器notifyDatasetChanged() 的两种模式。我想知道这两者的区别是什么,如果一个比另一个更好。

第一

在数据集的 Activity/Fragment 中保存一个局部变量。

private List<Movie> movieList;
private SwipeListAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.listView);
    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);

    movieList = new ArrayList<>();
    adapter = new SwipeListAdapter(this, movieList);

然后当局部变量发生变化时,在Activity/Fragment中调用这个:

adapter.notifyDataSetChanged();

第二

将一个空的DatasetSet 数组传递给片段/活动中的适配器。

 EmployeeAdapter mAdapter;

 @Override
 public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      mAdapter = new EmployeeAdapter(this, new ArrayList<Employee>());
      ListView employeeListView = (ListView) findViewById(R.id.employees);
      employeeListView.setAdapter(mAdapter);
 }

当数据被修改或检索时调用:

mAdapter.setEmployees(data);

Adapter 类本身中表示此方法:

public void setEmployees(List<Employee> data) {
    employees.addAll(data);
    notifyDataSetChanged();
}

【问题讨论】:

    标签: android android-fragments adapter listadapter


    【解决方案1】:

    第二个选项可能很好,因为它封装了有关如何将项目正确添加到适配器的逻辑。如果您在多个地方这样做,您将不会忘记在更新数据后调用notifyDataSetChanged()

    但是,还有第三种选择。您可以直接在 ArrayAdapter 上添加和删除项目,默认情况下这将在内部调用 notifyDataSetChanged()

    ArrayAdapter 具有以下方法来修改其元素,只要您不调用setNotifyOnChange(false),调用这些方法将在内部调用notifyDataSetChanged()

    addAll(Collection<? extends T> collection)
    addAll(T ... items)
    insert(T object, int index)
    remove(T object)
    clear()
    

    所以对于第二个示例,您确实不需要 setEmployees() 方法,因为您可以使用 mAdapter.addAll(data)

    【讨论】:

      猜你喜欢
      • 2018-06-06
      • 2013-08-27
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多