Android 在其他活动中添加新内容后刷新SQLite列表

Android 在其他活动中添加新内容后刷新SQLite列表,android,sqlite,Android,Sqlite,我有两个活动-一个显示来自的数据,另一个在那里添加数据。我可以用标签在它们之间切换。问题是,如果我添加一个新项目,我不知道如何刷新列表,因为它位于不同的活动类中,我无法在添加类中访问它。如何解决这个问题 这是我的两门课: 名单: 我还有一个小问题。在我的第一个(列表)活动中,当我在“onLongClick”中访问每个变量时,将它们设置为final-为什么会这样,并且可以避免?另外,任何关于我应该查看哪些内容并使我的代码更好或我犯的任何其他错误的评论都是非常好的。您想要使用的是一个连接到SQLit

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

这是我的两门课:

名单:


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

您想要使用的是一个连接到SQLite DB的游标加载程序(请参阅)。然后,您可以使用,例如,其适配器与游标加载程序同步的ListView。这是使用侦听器模式自动完成的(或多或少)

在添加数据的活动中,您需要通知所有侦听器数据已更改。通常,您可以通过调用notifyChange来完成此操作(请参阅)


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

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

使用cursor.setNotificationUri、contentResolver.notifyChange和cursor.registerContentChangeObserver从匿名类访问时,您需要变量final或更大范围内的变量。通常,您可以拥有这些实例成员。或者,您可能会注意到id是作为参数提供的(不需要get(position).getId,适配器也是传递的。您可以强制转换它以避免引用其他引用。让Add activity触发一个事件,并让另一个获取此euent并刷新?我将其放入Add:Intent I=new Intent(this,FirstActivity.class);startActivity(我);它成功了。将我的返回列表并再次加载所有内容。谢谢!:)至少使用本地广播管理器。否则,由于进程间通信,会产生大量开销;intent.setAction(“de.vogella.android.mybroadcast”);发送广播(意图);像这样?也谢谢你。我必须管理我不太明白你说的话,SoulLeaver的anwser对我来说更简单,但仍然非常感谢你的努力。当我精通java/android时,我会再读一遍,我相信这会让我受益:)游标加载程序是用于侦听底层数据源中的更改的标准模式。要获得清晰的代码,您应该阅读一些有关此主题的教程。这真的让我明白了发生了什么。
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();
}