【问题标题】:Returning to parent activity's existing instance from another activity从另一个活动返回到父活动的现有实例
【发布时间】:2016-05-03 20:49:51
【问题描述】:

我正在创建一个具有聊天功能的库项目,因此用户必须将他的启动活动注册为父项才能执行回栈(向后导航)。 这是我的示例应用清单。

<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.ak.messages.ChatActivity"
            android:label="@string/app_name"
            android:screenOrientation="sensorPortrait"
            android:parentActivityName=".MainActivity"
            android:theme="@style/AppTheme"
            android:windowSoftInputMode="adjustResize">
            <meta-data android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>

这是我尝试从 ChatActivity 导航回来的方式

   @Override
    public void onBackPressed() {
        Intent intent = NavUtils.getParentActivityIntent(this);
            if(intent!=null){
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);

        }
//      super.onBackPressed();
    }

但它总是创建一个新实例。有什么方法可以确保当用户执行背压时相同的 MainActivity 实例被撤销?

PS:我的 MainActivity 不直接调用聊天活动 提供了用于启动它的 API。

谢谢。

【问题讨论】:

  • 你为什么不在 onBackPressed 中完成()你的活动?如果在启动您的活动时启动活动尚未完成,那么这将重新启动前一个活动。
  • @dev.bmax 这是一个库项目,如果我收到通知或只是有意启动聊天活动,完成它将关闭应用程序而不是启动它的父应用程序。

标签: android android-intent android-activity android-navigation


【解决方案1】:

你为什么不尝试替换

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setFlags(FLAG_ACTIVITY_SINGLE_TOP);

通过这种方式,您将恢复父活动,并将在onNewIntent()Parent Activity 中收到回调

【讨论】:

    【解决方案2】:

    终于能够在意图操作的帮助下访问/启动活动:

     @Override
        public void onBackPressed() {
            Intent intent = NavUtils.getParentActivityIntent(this);
                if(intent!=null){
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    intent.setAction("android.support.PARENT_ACTIVITY");
                startActivity(intent);
            }super.onBackPressed();
        }
    

    用户可以从意图中获取操作的位置来处理..

    【讨论】:

      猜你喜欢
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多