0

我的主屏幕是从数据库中查询的姓名列表,单击时会提供有关姓名的某些信息(电话号码、层次结构、邮件 ID 等)。我还有编辑和添加新联系人的选项(我添加了按钮来这样做)。一切正常,但是,当我将名称更新到数据库时,我无法立即看到这些名称。但是当我重新运行应用程序时,我可以看到更改。如何动态有效地显示名称?我能想到的一件事是再次查询数据库,onResume 和 display。但我觉得它不够高效。我也可以使用 startActivityforResult() 但我不能按升序排列它们,我一次上传许多联系人。

代码

    // Make a New Database
    DBContact info = new DBContact(this);
    info.open();
    String[] data = info.queryAll();
    info.close();
    // Display the names
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(Contacts.this,
            android.R.layout.simple_list_item_1, data);
    listview.setAdapter(adapter);
4

5 回答 5

1

您应该使用 LoaderManager 将数据库数据与数据库适配器挂钩。它会给你两个好处 -

  1. 它不在 UI 线程上运行以获取数据,因此显示没有延迟。
  2. 如果数据库中的某些内容发生更改,它将自动刷新数据。

更多细节在这里 - https://developer.android.com/reference/android/app/LoaderManager.html

于 2012-10-19T12:05:32.490 回答
1

您可以考虑使用 CursorAdapter 或 SimpleCursorAdapter,并直接在您的视图中使用它,而不是将查询结果包装在数组适配器中。

http://developer.android.com/reference/android/widget/CursorAdapter.html

于 2012-10-19T12:05:58.607 回答
1

查看文档中的notifyDataSetChanged()。将数据添加到数据库后,调用它来更新列表。

于 2012-10-19T12:06:40.790 回答
1

你需要做的2个任务:

  1. 在数据库中添加数据
  2. 检查数据是否插入成功,然后在您的适配器中添加相同的数据。修改适配器中的数据后不要忘记调用notifyDataSetChanged() 。
于 2012-10-19T12:08:35.410 回答
0

作为解决方法尝试以这种方式重新启动加载程序:

getLoaderManager().restartLoader(0, null, this);
于 2016-03-02T12:50:04.787 回答