gpt4 book ai didi

android - child Activity 返回按钮与完成()

转载 作者:太空狗 更新时间:2023-10-29 13:25:26 24 4
gpt4 key购买 nike

我注意到这一点:我有一个父 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(),而是调用它的 FragmentManagerspopBackStackImmediate() 方法。

/**
* 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com