如何在其他活动中修改数据库时重新填充arrayadapter?

时间:2015-07-29 21:38:56

标签: android android-arrayadapter

我正在使用一个数组适配器,它使用主详细信息流布局,以显示存储在apps数据库中的项目列表。

从这个活动/片段中,我调用另一个活动来向数据库添加新记录。添加新记录后,此活动将完成,用户将返回到主详细信息流布局。

然后,我希望使用在新活动中创建的更新数据库显示此视图。我不是100%确定实现这个的最佳方法。我在onResume方法中考虑过,我调用了一个用新数据重新填充数组适配器的函数,但这似乎是错误的方式,因为它总是会重新填充,即使数据库中没有更改数据也是如此。

3 个答案:

答案 0 :(得分:1)

您可以使用startActivityForResult()开始添加项目的活动 并在列表活动中实现回调onActivityResult()

如果成功添加了数据库元素,您可以重新填充onActivityResult()中的列表项。

请参阅此http://developer.android.com/training/basics/intents/result.html

例如在listActivity中

private void addItem(){
    ...
    startActivityForResult(intent, ADD_REQUEST);
    ...
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == ADD_REQUEST && resultCode == RESULT_OK) {
        // here you can repopulate the list
    }
}

和addItem活动

private void addingItem(){
    ...
    // when the item saved successfully you can set the results to ok
    setResult(RESULT_OK);
    ...
}

答案 1 :(得分:0)

如果将值保存到将充当标志的共享prefrance,那该怎么办: 让我们说如果改变,则值为x:1,否则为0。

默认情况下,它应该是零。每当用户访问新活动并且数据库的内容发生变化时,该值应该更改回1.(如果不是,它将保持为零)。

然后onResume你检查这个值是否为零然后你没有重新填充列表。但是,如果它为1,则将其更改回零,从数据库更新列表,并在适配器上调用notifydatasetchanged()。

祝你好运

答案 2 :(得分:0)

您始终可以使用startActivityForResult()并通知调用活动数据是否已更改。