android - 当 child Activity 完成时刷新 parent Activity
android - refresh parent Activity when child Activity finishes
我有一个 parent Activity 开始一个 child activity.
在childactivity中,我做:
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ride");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
当我单击 Home/Up 按钮时,我 finish
activity。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
此外,我 finish
在 Child Activity 的另外一个地方做finish
,它回到 Parent Activity.
我的问题:
我的问题是我想刷新 Parent Activity 只有 one的 finishes
。
当我完成时 不是通过向上按钮 - Parent Activity 中的数据发生变化, 所以 - 当我按下 Back/Up 按钮时,不需要刷新 Parent,但是当我按下另一个 finish
时,我要刷新Parent.
我怎样才能检测到?
开始 child activity 作为
startActivityForResult(intent, requestCode)
如果按下向上按钮,则在 child 中将结果设置为成功 activity,如果按下按钮,则将结果设置为失败。
并在 parent 的 onActivityResult(..)
activity 中获取状态并在所需情况下杀死 parent activity。
如所述,您在两个地方使用了 finish() 方法。一个是 ActionBar 上的后退按钮(让它被称为 AbBack),另一个在其他地方(RandomBack)。
设A为主Activity为B为子Activity.
在A中代替startActivity()方法,使用
startActivityForResult(Intent intent, int REQUEST_CODE);
这样做是为了 Activity B 在完成时可以 return 数据到这个 activity,并且根据数据你可以 refresh/not-refresh
所以在ActivityB,
在AbBack的情况下,调用这个方法setResult(RESULT_OK);对于 RandomBack,调用 setResult(RESULT_CANCELED);
最后在ActivityA,你要重写方法
onActivityResult(int requestCode, int resultCode, In
帐篷数据)
你可以在哪里比较 resultCode == RESULT_OK 如果是这样,那意味着数据来自 AbBack 或者如果不是来自 RandomBack,并进行所需的刷新。
在ParentActivity
startActivityForResult(Intent intent, int REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
case RESULT_OK:
//refresh parentAcitivty
//get the result from the Up button back
//e.g adapter.notifydatasetchanged()
case RESULT_CANCEL:
//Do nothing
//return from childActivity by other finishes
在ChildActivity
case 1: //**from the Up button**
setResult(RESULT_CANCEL);
finish();
case 2: //**do the other finish**
setResult(RESULT_OK);
finish();
希望代码能给大家一点提示
在这种情况下,使用 onResume
。
@Override
protected void onResume() {
super.onResume();
// your code (for example: initialize(); etc.. )
}
如果你参考这篇文章,你就会明白为什么。
activity life cycle Android
使用NavUtils.navigateUpFromSameTask(this); onBackPressed 函数如下:
@Override
public void onBackPressed() {
super.onBackPressed();
NavUtils.navigateUpFromSameTask(this);
}
我有一个 parent Activity 开始一个 child activity.
在childactivity中,我做:
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ride");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
当我单击 Home/Up 按钮时,我 finish
activity。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
此外,我 finish
在 Child Activity 的另外一个地方做finish
,它回到 Parent Activity.
我的问题:
我的问题是我想刷新 Parent Activity 只有 one的 finishes
。
当我完成时 不是通过向上按钮 - Parent Activity 中的数据发生变化, 所以 - 当我按下 Back/Up 按钮时,不需要刷新 Parent,但是当我按下另一个 finish
时,我要刷新Parent.
我怎样才能检测到?
开始 child activity 作为
startActivityForResult(intent, requestCode)
如果按下向上按钮,则在 child 中将结果设置为成功 activity,如果按下按钮,则将结果设置为失败。
并在 parent 的 onActivityResult(..)
activity 中获取状态并在所需情况下杀死 parent activity。
如所述,您在两个地方使用了 finish() 方法。一个是 ActionBar 上的后退按钮(让它被称为 AbBack),另一个在其他地方(RandomBack)。
设A为主Activity为B为子Activity.
在A中代替startActivity()方法,使用
startActivityForResult(Intent intent, int REQUEST_CODE);
这样做是为了 Activity B 在完成时可以 return 数据到这个 activity,并且根据数据你可以 refresh/not-refresh
所以在ActivityB,
在AbBack的情况下,调用这个方法setResult(RESULT_OK);对于 RandomBack,调用 setResult(RESULT_CANCELED);
最后在ActivityA,你要重写方法
onActivityResult(int requestCode, int resultCode, In
帐篷数据)
你可以在哪里比较 resultCode == RESULT_OK 如果是这样,那意味着数据来自 AbBack 或者如果不是来自 RandomBack,并进行所需的刷新。
在ParentActivity
startActivityForResult(Intent intent, int REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
case RESULT_OK:
//refresh parentAcitivty
//get the result from the Up button back
//e.g adapter.notifydatasetchanged()
case RESULT_CANCEL:
//Do nothing
//return from childActivity by other finishes
在ChildActivity
case 1: //**from the Up button**
setResult(RESULT_CANCEL);
finish();
case 2: //**do the other finish**
setResult(RESULT_OK);
finish();
希望代码能给大家一点提示
在这种情况下,使用 onResume
。
@Override
protected void onResume() {
super.onResume();
// your code (for example: initialize(); etc.. )
}
如果你参考这篇文章,你就会明白为什么。
activity life cycle Android
使用NavUtils.navigateUpFromSameTask(this); onBackPressed 函数如下:
@Override
public void onBackPressed() {
super.onBackPressed();
NavUtils.navigateUpFromSameTask(this);
}