我注意到这一点:我有一个父 Activity A,它使用 startActivity(intent)
打开子 Activity B。在 Activity B 中,如果我将以某种方式 finish()
此 Activity ,父 Activity 将从初始状态再次加载,但如果我按下后退键盘按钮,我将返回到 Activity A在我离开它的状态。
这是我如何完成 Activity B 的示例:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.icon:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
以下是我如何从 Activity A 打开 Activity B:
Intent intent = new Intent(thisActivity, toActivity);
startActivity(intent);
这是 list XML:
<activity
android:name="com.evapp.activities.A"
android:label="@string/A" >
</activity>
<activity
android:name="com.evapp.activities.B"
android:configChanges="orientation"
android:label="@string/B"
android:parentActivityName="com.evapp.activities.A"
android:screenOrientation="portrait" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.evapp.activities.A" />
</activity>
谁能解释一下 finish()
和 return 之间的区别?
最佳答案
在使用 fragment 时,调用 finish()
和按下后退按钮并不完全相同。如果我们查看 Android Activity
的源代码,我们可以看到它不是简单地立即调用 finish()
,而是调用它的 FragmentManagers
的 popBackStackImmediate()
方法。
/**
* Called when the activity has detected the user's press of the back
* key. The default implementation simply finishes the current activity,
* but you can override this to do whatever you want.
*/
public void onBackPressed() {
if (!mFragments.popBackStackImmediate()) {
finish();
}
}
popBackState()
所做的是从返回堆栈中删除最新的 fragment 。 Immediate 只是意味着它立即执行而不是异步执行。它仅在没有 fragment 被删除时返回 false - 在这种情况下 finish()
将被调用。
我不确定为什么您的第一个 Activity 在调用 finish()
时似乎被重新初始化。如果您真的回到第一个 Activity ,则应该执行 onResume()
方法,这可能会改变它的外观。要完全了解发生了什么,我们应该了解您如何创建 fragment 以及 onResume()
方法中发生了什么。
关于android - child Activity 返回按钮与完成(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21766707/