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

标签 android android-activity

我注意到这一点:我有一个父 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/

相关文章:

android - 如何将图像/文件复制到android中的剪贴板?获得此信息的任何替代方法/步骤

android - 有没有办法以编程方式在 Android 中读取/访问电子邮件或收件箱?

android - 更新gradle版本并编译到实现时,“无法解决recyclerview-v7”错误

android - 如何以编程方式获取前台 Android Activity (在我自己的应用程序中)的快照?

java - MediaRecorder 启动在无效状态下调用 : 0

Android:在两个 Activity 之间切换并在它们之间共享信息

android - 将 JSON 嵌套到 flutter 中

android - 使用 OnTouch 事件在 Canvas 中选择和放置不同的形状

android - 当 Activity 在 android 中加载 'N' 次时执行某些操作

java - 尝试与 Android Intent 共享图像