如何在两个活动之间进行通知

时间:2016-07-06 12:45:40

标签: android listview android-fragments notifydatasetchanged

我有两个活动,每个活动都包含片段。 Activity A有一个带ListView的片段。 ListView的行是从SQLiteDatabase获得的。

活动B包含一个片段,可以编辑数据库的条目。当用户编辑数据库条目时,保存数据,然后通过后退按钮返回活动A或:

actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);

如何通知活动A中的ListView数据库发生了变化?我理解如何在Activity和它的片段之间进行通信,但是当片段处于​​两个不同的活动时,如何实现notifydatasetchanged?

我怀疑通过后退按钮返回活动A只是从堆栈中调用视图,但是当数据库发生变化时,该视图已经改变。

3 个答案:

答案 0 :(得分:0)

您只需在活动A中调用notifyDataSetChanged中的onResume即可。当您关闭或从活动B返回A时,它会更新数据。不要忘记检查适配器是否与null不同,否则在第一次打开App时它可能会崩溃。

您还可以在活动A中创建公共功能,更新列表并从活动B中调用它。

class ActivityA

public static void updateList() {
    if(adapter != null){
      adapter.notifyDataSetChanged;
    }
}


class ActivityB

ActivityA.updateList();

希望有所帮助:)

答案 1 :(得分:0)

您需要从SQLite数据库中读取更新的数据集并再次传递适配器。需要通知适配器后。例如,如下面的代码:

在您的活动A中

@Override
protected void onResume() {
    super.onResume();

    // method to read new dataset
    Database ourDB = new Database(this);
    ourDB.openDB();
    data = ourDB.getData();
    ourDB.closeDB();

    if(adapter == null) {
        // initializes adapter when first launched
        adapter = new RecyclerViewAdapter(data, this);
        yourListView.setAdapter(adapter);
    }
    else {
        // in subsequent returns to activity we are replacing 
        // old data with new and reusing existing adapter
        adapter.updateData(data);
    }

}

在你的适配器类中包含类似的方法:

public void updateData(ArrayList<String> newData) {
    data = newData;
    this.notifyDataSetChanged();
}

答案 2 :(得分:0)

您可以使用startActivityForResult(启动activityB)启动活动,并在需要时覆盖activityA中的onActivityResult方法和notifyDataSetChanged。