Android 将记录插入数据库后如何更新listview?

Android 将记录插入数据库后如何更新listview?,android,sqlite,listview,sql-update,Android,Sqlite,Listview,Sql Update,我在向数据库插入记录后更新listview时遇到问题 创建后,我将数据从数据库加载到listview,如下所示: Cursor c = db.getAllCategory(); List<String> l = db.getItemByFilteredCategory(); //add total goals that match with each category if (c.moveToFirst()) { do {

我在向数据库插入记录后更新listview时遇到问题

创建后,我将数据从数据库加载到listview,如下所示:

Cursor c = db.getAllCategory();
    List<String> l = db.getItemByFilteredCategory();

    //add total goals that match with each category
    if (c.moveToFirst()) {
        do {
            int totalGoals = db.getMyGoalByCat(c.getInt(0)).getCount();
            db.updateCategory(c.getInt(0), c.getString(1), c.getString(2), totalGoals);

        } while (c.moveToNext());
    }

    //update category list
    c = db.getAllCategory();

    //add items to list
    ListAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.custom_categorylist,
            c,
            new String[]{"_id", "categoryName", "categoryDescription", "totalGoals"},
            new int[]{R.id.customViewCatId, R.id.customViewCategory, R.id.customViewCatDescription, R.id.customViewTargetNumber});

    lv.setAdapter(adapter);
此时,我将回到listview的主要活动。如何在此步骤中获取listview更新


干杯,

要更新列表中的数据,您必须调用适配器。notifyDataSetChanged()

如果onClickListener在onCreate中

btnCreate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    DBAdapter dbSub = new DBAdapter(getApplicationContext());
                    dbSub.openDB();
                    dbSub.insertCategory(etCatName.getText().toString(),etCatDescription.getText().toString(), 0);
                    dbSub.closeDB();
adapter.notifyDataSetChanged();
                    dialog.dismiss();
                }
            });
除非

btnCreate.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        DBAdapter dbSub = new DBAdapter(getApplicationContext());
                        dbSub.openDB();
                        dbSub.insertCategory(etCatName.getText().toString(),etCatDescription.getText().toString(), 0);
                        dbSub.closeDB();
    lv.getAdapter().notifyDataSetChanged();
                        dialog.dismiss();
                    }
                });

希望这能有所帮助。

插入数据库后,尝试适配器.notifyDataSetChanged()。当用于填充列表的基础数组或等效类对象引用被修改时,notifyDataSet可以工作。仅仅通过调用notify是没有帮助的。我需要声明适配器对象吗?我真的不明白。什么是适配器?lv.setAdapter(适配器);此适配器位于支架内。检查您的代码。是,但我找不到notifyDataSetChanged方法?这是因为我在onCreate方法中声明了适配器,然后在对话框中调用它吗?是的,全局声明适配器并调用它。对于这一点,您仍然想知道为什么他们找不到notifyDataSetChanged方法,您需要将适配器强制转换为customAdapter。e、 g.
((MyListAdapter)listview.getAdapter()).notifyDataSetChanged()
btnCreate.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        DBAdapter dbSub = new DBAdapter(getApplicationContext());
                        dbSub.openDB();
                        dbSub.insertCategory(etCatName.getText().toString(),etCatDescription.getText().toString(), 0);
                        dbSub.closeDB();
    lv.getAdapter().notifyDataSetChanged();
                        dialog.dismiss();
                    }
                });