在一项活动中,我正在更新我的数据库。我检查以确保db已更新并完成()该活动。但是当我在上一个活动中时,我的数据库没有更新,因此我的recyclerview也没有更新。有什么想法吗?
此外,数据库调用在我的onResume中。
哦,还有一个关键细节,如果我离开活动并返回它,它最终会更新。
答案 0 :(得分:0)
您必须在活动1 中的notifyDataSetChanged()
中致电onResume()
,在那里您拥有RecyclerView
。但这不是好方法。每当您将最小化您的活动并使其再次激活时,即使您的数据库未更新,也始终会调用onReceive()
。
您所要做的就是使用活动1 中的startActivityForResult()
,如下所示:
Intent i = new Intent(Activity1.this, Activity2.class);
startActivityForResult(i, DB_UPDATE_REQUEST);
其中DB_UPDATE_REQUEST
在活动1 中声明,如下所示:
public static final int DB_UPDATE_REQUEST = 1;
在活动2 中更新数据库后创建Intent
,如果数据库成功更新或RESULT_OK
,请将结果设置为RESULT_CANCELED
如果数据库更新被取消或中断如下:
if (your_db_update_status) {
setResult(AppCompatActivity.RESULT_OK);
} else {
setResult(AppCompatActivity.RESULT_CANCELED);
}
finish();
在活动1 中检索活动2 发送的信息,如下所示:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DB_UPDATE_REQUEST) {
switch (resultCode) {
case RESULT_OK: {
Log.i("Activity 1", "Back from Activity 2. DB succesfully updated.");
adapter.notifyDataSetChanged();
break;
}
case RESULT_CANCELED: {
Log.i("Activity 1", "Back from Activity 2. Error in updateing DB.");
break;
}
}
}
}