3

我有两个活动 - 一个显示来自SQLite的数据,另一个在那里添加数据。我可以使用标签在它们之间切换。问题是,如果我添加一个新项目,我不知道如何刷新列表,因为它位于不同的活动类中,我无法在添加类中访问它。如何解决?

这是我的两门课:

列表:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_1);

    final ShoppingSQL shoppingSQL = new ShoppingSQL(this);
    final List<ShoppingData> list = shoppingSQL.getAll();

    final ArrayAdapter<ShoppingData> adapter = new ArrayAdapter<ShoppingData>(
            this, android.R.layout.simple_list_item_1, list);
    setListAdapter(adapter);

    this.getListView().setLongClickable(true);
       this.getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
            public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
                shoppingSQL.delete((int)list.get(position).getId());
                adapter.remove(list.get(position));
                adapter.notifyDataSetChanged();
                return true;
            }
        });
}

添加:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_2);
}

public void ButtonOnClick(View v) {
    ShoppingSQL shoppingSQL = new ShoppingSQL(this);

    ShoppingData data = new ShoppingData();
    data.setName("test");

    shoppingSQL.add(data);

    Dialog d = new Dialog(this);
    d.setTitle("Added!");
    d.show();
}

我还有一个小问题。在我的第一个(列表)活动中,当我在“onLongClick”中访问它们时,Eclipse将每个变量都设为 final - 为什么会这样,可以避免吗?此外,任何关于我应该查看的内容以及使我的代码更好或我犯的任何其他错误的评论都会非常好。

4

2 回答 2

3

我会保持简单。只需将意图从 Add 类发送到 List 类,然后您的列表将再次填充新项目。

于 2013-01-21T15:52:21.840 回答
2

您要使用的是连接到 SQLite DB 的 CursorLoader(请参阅http://developer.android.com/reference/android/content/CursorLoader.html)。然后,您可以使用例如其适配器与 CursorLoader 同步的 ListView。这是使用侦听器模式(或多或少)自动完成的。

在添加数据的活动中,您需要通知所有侦听器数据已更改。通常,您通过调用notifyChange来执行此操作(请参阅http://developer.android.com/reference/android/content/ContentResolver.html#notifyChange%28android.net.Uri,%20android.database.ContentObserver,%20boolean%29) .

您可能还想考虑实现自己的内容提供程序。

于 2013-01-21T15:49:47.400 回答