列表视图未更新

时间:2016-01-30 19:48:52

标签: android listview

我有一个简单的列表视图,由用户输入填充。在单击OK按钮之前,用户单击浮动按钮以显示其信息对话框。单击按钮时,我希望更新列表。我一直在使用notifyDataSetChanged(),但这不起作用。什么是更新是当我离开活动并重新输入它时,但显然这不是我想要做的。

有人可以查看我的代码,看看我哪里出错吗?

MyCursorAdapter

        db.open();

    db.getAllRecipes();

    Cursor cursor = db.getAllItems();

    //String[] columns = new String[] {db.KEY_NAME, db.KEY_CODE, db.KEY_ROWID};
    String[] columns = new String[] {db.KEY_ITEM_NAME};

    int[] to = new int[] {R.id.ingredientName};

    final SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(this,R.layout.row4, cursor, columns, to, 0);

列表和按钮侦听器

        final ListView shoppingList = (ListView) findViewById(R.id.shoppingList);
    shoppingList.setAdapter(myCursorAdapter);

    FloatingActionButton filterButton = (FloatingActionButton) findViewById(R.id.filterButton);
    filterButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // custom ingredient_dialog
            final Dialog dialog = new Dialog(context);
            dialog.setContentView(R.layout.shopping_dialog);
            dialog.setTitle("Add Item");

            final EditText item = (EditText) dialog.findViewById(R.id.item);

            Spinner measurement = (Spinner) dialog.findViewById(R.id.measurement);

            Spinner unit = (Spinner) dialog.findViewById(R.id.unit);

            Button dialogButtonOk = (Button) dialog.findViewById(R.id.dialogButtonOK);
            // if button is clicked, close the custom ingredient_dialog
            dialogButtonOk.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String newItem = item.getText().toString();
                    db.open();
                    db.insertItem(newItem);
                    myCursorAdapter.notifyDataSetChanged();
                    dialog.dismiss();
                }
            });

1 个答案:

答案 0 :(得分:0)

在单击按钮上,您将项目插入数据库,但无法重新填充适配器。这就是为什么listview没有更新的原因。

更新数据后,您需要从数据库中获取数据,然后调用notifyDataSetChanged()

简而言之,在将数据插入数据库之后,需要调用适配器创建代码。这样做就完成了。