简体   繁体   English

无法使用notifyDataSetChanged更新适配器

[英]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.

相关问题 notifyDataSetChanged()无法更新适配器onClick - notifyDataSetChanged() fails to update adapter onClick RecyclerView适配器不会在notifyDataSetChanged()(不是Collection)上更新 - RecyclerView adapter doesn't update on notifyDataSetChanged() (not Collection) notifyDataSetChanged不会更新我的列表适配器 - notifyDataSetChanged does not update my List adapter Android RecyclerView MVVM 在哪里使用 notifyDataSetChanged 更新适配器 - Android RecyclerView MVVM where to update Adapter with notifyDataSetChanged 在adapter.notifyDataSetChanged()之后,Listview不会更新 - Listview does not update after adapter.notifyDataSetChanged() 适配器notifyDataSetChanged后Android更新imageview - Android update imageview after adapter notifyDataSetChanged 如何在 MainActivity 中使用 Adapter.notifyDataSetChanged()? - How to use Adapter.notifyDataSetChanged() in MainActivity? 适配器上的notifydataSetChanged将使用新项目进行更新,但不会更新现有项目 - notifydataSetChanged on Adapter will update with new items, but will not update the existing items 数据库更新和适配器后,列表视图未更新。notifyDataSetChanged(); - Listview not updating after database update and adapter.notifyDataSetChanged(); 由于ArrayList与适配器的绑定问题,notifyDataSetChanged()无法正确更新 - notifyDataSetChanged() fails to update correctly due to ArrayList to Adapter binding issues
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM