首次進入 ListView 顯示 1,2,3。按返回鍵退出再進入,顯示 1,2,3,1,2,3。每次進入數據疊加。
ArrayList 為靜態成員變量或單例持有,且每次初始化未 clear()。Activity 重建時,同一列表實例被重複添加數據。
// 錯誤模式
public class MyActivity extends Activity {
private static List<Map<String,Object>> listItems = new ArrayList<>(); // 靜態!
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 未清空直接添加
listItems.addAll(loadData());
adapter = new MyAdapter(this, listItems);
listView.setAdapter(adapter);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
List<Map<String,Object>> listItems = new ArrayList<>(); // 局部新建
listItems.addAll(loadData());
adapter = new MyAdapter(this, listItems);
listView.setAdapter(adapter);
}
listItems.clear(); // 關鍵!
listItems.addAll(loadData());
adapter.notifyDataSetChanged();
public class MyViewModel extends ViewModel {
public MutableLiveData> items = new MutableLiveData<>();
}
// Activity 中
viewModel = new ViewModelProvider(this).get(MyViewModel.class);
viewModel.items.observe(this, list -> adapter.submitList(list));
clear() 或重新 new ArrayList()。new ArrayList<>(source)。notifyDataSetChanged() 全量刷新。