[英]Cannot use notifyDataSetChanged to update adapter
刪除項目后,我無法更新ListView
。 Listview項目已從數據庫中刪除,但我無法更新適配器,並且它一直在listView中顯示已刪除的項目。
如果我把adapter.notiftDataSetChanged();
變成了奇怪的紅色代碼! 並顯示cannot resolve the method notifyDataSetChanged().
這是我的代碼。
ArrayList<HashMap<String, String>> items = new ArrayList<>();
List<TRListFormat> list = trDb.getAllReminders();
for (TRListFormat val : list) {
HashMap<String, String> map = new HashMap<>();
map.put("title",val.getTitle());
map.put("description", val.getDes());
map.put("date", val.getDate());
map.put("time", val.getTime());
items.add(map);
}
adapter = new SimpleAdapter(this, items, R.layout.tr_list_format,
new String[] { "title", "description", "date", "time" },
new int[] {R.id.tbr_title, R.id.tbr_des, R.id.tbr_date, R.id.tbr_time });
lv = (ListView)findViewById(R.id.tbr_list);
lv.setAdapter(adapter);
我的setOnItemClickListener
,它在單擊listview項時顯示帶有3個按鈕的AlertDialog
。
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(final AdapterView<?> adapterView, View view, int position, final long id) {
AlertDialog.Builder builder = new AlertDialog.Builder(TRList.this);
builder.setTitle("Select the Action");
builder.setMessage("Do anything");
builder.setPositiveButton("Edit",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
int remId = (int)id;
Bundle dataBundle = new Bundle();
dataBundle.putInt("remId", remId);
Intent intent = new Intent(getApplicationContext(),TRTimeReminder.class);
intent.putExtras(dataBundle);
startActivity(intent);
}
});
builder.setNeutralButton("Deactivate",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.setNegativeButton("Delete",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
int remId = (int)id + 1;
TRListFormat format = trDb.getReminder(remId);
String title = format.getTitle();
String des = format.getDes();
String date = format.getDate();
String time = format.getTime();
trDb.deleteReminder(new TRListFormat(remId, title, des, date, time));
Toast.makeText(getApplicationContext(), "Reminder: "+title+"deleted",
Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged(); //this line shows an error I have written above
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
解決方案1 (首選)
notifyDataSetChanged
不適用於SimpleAdapter
。 SimpleAdapter
適用於靜態數據。 您應該使用其他類型的適配器,例如ArrayAdapter
。 更多信息在這里
解決方案2
調用此方法,而不是adapter.notifyDataSetChanged();
public void refreshList(){
List<TRListFormat> list = trDb.getAllReminders();
items = new ArrayList<>();
for (TRListFormat val : list) {
HashMap<String, String> map = new HashMap<>();
map.put("title",val.getTitle());
map.put("description", val.getDes());
map.put("date", val.getDate());
map.put("time", val.getTime());
items.add(map);
}
adapter = new SimpleAdapter(this, items, R.layout.tr_list_format,
new String[] { "title", "description", "date", "time" },
new int[] {R.id.tbr_title, R.id.tbr_des, R.id.tbr_date, R.id.tbr_time });
lv.setAdapter(adapter);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.