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

时间:2014-12-26 10:27:22

标签: android sqlite listview sql-update

将记录插入数据库后更新listview时出现问题。

OnCreate,我将数据从数据库加载到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);

在同一个活动中,我有一个按钮。单击该按钮时,我会显示一个包含2个按钮的对话框:创建和取消。

如果单击“创建”按钮,我会将新数据插入数据库并关闭对话框。

btnAddCategory.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Dialog dialog = new Dialog(MainActivity.this);
            dialog.setContentView(R.layout.custom_create_category);
            dialog.setTitle("Create new category");
            dialog.show();

            Button btnCancel = (Button) dialog.findViewById(R.id.btnCancelCategory);
            btnCancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });

            final EditText etCatName = (EditText) dialog.findViewById(R.id.etCatName);
            final EditText etCatDescription = (EditText) dialog.findViewById(R.id.etCatDescription);

            Button btnCreate = (Button) dialog.findViewById(R.id.btnCreateCategory);
            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();

                    dialog.dismiss();
                }
            });
        }
    });

那一刻,我将使用listview返回主Activity。如何在此步骤中获取listview更新?

干杯,

2 个答案:

答案 0 :(得分:1)

要更新列表中的数据,您必须调用 adapter.notifyDataSetChanged()

答案 1 :(得分:0)

如果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();
                    }
                });

希望这可以提供帮助。