【问题标题】:Refresh listview from database after a dialog对话框后从数据库刷新列表视图
【发布时间】:2014-09-25 01:58:57
【问题描述】:

我有一个从 SQL 数据库生成的列表视图。

用户可以单击其中一个列表项,然后会弹出一个对话框,其中包含“编辑”或“删除”选项。用户还可以点击底部的按钮将项目“添加”到数据库中。所有这些功能都可以正常工作,但是为了刷新列表视图,用户需要返回一个活动,然后再次前进。对话框关闭后如何让列表视图自动刷新??

代码如下:

    final LevelTextDatabase ltb = new LevelTextDatabase(this);
    final List<LevelText> texts = ltb.getLevelTexts(level);

    final BaseAdapter theAdapter = new ArrayAdapter<LevelText>(this, android.R.layout.simple_list_item_1,
            texts);

    final ListView theListView = (ListView) findViewById(R.id.levelTextList);

    theListView.setAdapter(theAdapter);
    theListView.setFastScrollAlwaysVisible(true);

    theListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id)
        {
            CharSequence options[] = new CharSequence[] {"edit", "delete"};

            AlertDialog.Builder builder = new AlertDialog.Builder(EditLevelText.this);
            builder.setTitle("What would you like to do?");
            builder.setItems(options, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //user clicks edit
                    if (which == 0)
                    {
                        AlertDialog.Builder alert = new AlertDialog.Builder(EditLevelText.this);

                        alert.setTitle("Edit Criteria");
                        alert.setMessage("Edit: ");
                        final EditText input = new EditText(EditLevelText.this);
                        alert.setView(input);
                        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                ltb.editText(texts.get(position).getId(),
                                        String.valueOf(input.getText()));

                                //insert refresh command here????

                            }
                        });
                        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {

                            }
                        });
                        alert.show();

                    }
                    if (which == 1) {
                        ltb.deleteText(texts.get(position).getId());

                        //this refresh works

                        texts.remove(position);
                        theAdapter.notifyDataSetChanged();

                    }

                }
            });
            builder.show();

        }
    });

}

//method for add button
public void addLevelText(View view) {

    Intent prev = getIntent();
    final int level = prev.getExtras().getInt("level");

    final LevelTextDatabase ltb = new LevelTextDatabase(this);

    AlertDialog.Builder alert2 = new AlertDialog.Builder(EditLevelText.this);

    alert2.setTitle("Add Criteria");
    alert2.setMessage("Add: ");
    final EditText input = new EditText(EditLevelText.this);
    alert2.setView(input);
    alert2.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            ltb.addLevelText(new LevelText(level, String.valueOf(input.getText())));

            //insert refresh here????
        }
    });
    alert2.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

        }
    });
    alert2.show();

}

【问题讨论】:

  • 试试theAdapter.notifyDatasetChanged();

标签: android sql listview


【解决方案1】:

您可以调用onDismiss 并在该方法中刷新活动。

public abstract void onDismiss (DialogInterface dialog) {
  finish();
  startActivity(getIntent());
}

【讨论】:

  • 这是刷新列表数据最糟糕的方式,用户只需使用notifyDatasetChanged 来刷新列表项。
  • 除非在 'onCreate()' 中,否则 'notifyDataSetChanged' 不起作用
  • @unagi2x7:你为什么这么说?
  • @unagi2x7 将theAdapter 设为类的属性(设为全局,定义类的顶部)然后您可以在 itemClick 中访问它
  • 适配器基于文本列表,我无法通过添加按钮方法编辑文本列表
【解决方案2】:

将 final List 文本和 final BaseAdapter 设置为 MainActivity 的Adapter 成员并调用 每当文本发生变化时,notifyDatasetChanged。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多