Ich habe zwei Muster für die Handhabung eines Listenadapters notifyDatasetChanged()
festgestellt. Ich fragte mich, was unterscheidet die beiden und wenn einer besser als der andere ist.Update Datensatz innerhalb Fragment/Aktivität oder direkt im Adapter
Erste
eine lokale Variable in der Aktivität Holding/Fragment für den Datensatz.
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);
Und dann, wenn die lokale Variable ändert, rufen Sie diese in der Aktivität/Fragment:
adapter.notifyDataSetChanged();
Zweite
eine leere DatasetSet
Array an den Adapter in dem Fragment/Aktivität Passing .
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);
}
und wenn die Daten geändert oder abgerufen Aufruf folgt aus:
mAdapter.setEmployees(data);
, die dieses Verfahren in der sich Adapter
Klasse repräsentiert:
public void setEmployees(List<Employee> data) {
employees.addAll(data);
notifyDataSetChanged();
}