[英]Cannot use notifyDataSetChanged to update adapter
I cannot update my ListView
after deleting an item. 删除项目后,我无法更新
ListView
。 Listview item gets deleted from database but I cannot update my adapter and it keeps showing deleted item in listView. Listview项目已从数据库中删除,但我无法更新适配器,并且它一直在listView中显示已删除的项目。
if I put adapter.notiftDataSetChanged();
如果我把
adapter.notiftDataSetChanged();
it turns into red colored code strangely! 变成了奇怪的红色代码! And shows that
cannot resolve the method notifyDataSetChanged().
并显示
cannot resolve the method notifyDataSetChanged().
Here is my code. 这是我的代码。
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);
my setOnItemClickListener
, it displays AlertDialog
with 3 buttons as the listview item is clicked. 我的
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();
}
});
Solution 1 (Preferred) 解决方案1 (首选)
notifyDataSetChanged
is not available for SimpleAdapter
. notifyDataSetChanged
不适用于SimpleAdapter
。 SimpleAdapter
is meant for static data. SimpleAdapter
适用于静态数据。 You should use a different type of adapter, like ArrayAdapter
. 您应该使用其他类型的适配器,例如
ArrayAdapter
。 More information is here 更多信息在这里
Solution 2 解决方案2
Call this method instead of adapter.notifyDataSetChanged();
调用此方法,而不是
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.