我有两个活动,每个活动都包含片段。 Activity A有一个带ListView的片段。 ListView的行是从SQLiteDatabase获得的。
活动B包含一个片段,可以编辑数据库的条目。当用户编辑数据库条目时,保存数据,然后通过后退按钮返回活动A或:
actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
如何通知活动A中的ListView数据库发生了变化?我理解如何在Activity和它的片段之间进行通信,但是当片段处于两个不同的活动时,如何实现notifydatasetchanged?
我怀疑通过后退按钮返回活动A只是从堆栈中调用视图,但是当数据库发生变化时,该视图已经改变。
答案 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。