我正在创建一个具有聊天功能的库项目,因此用户必须将其启动活动注册为父项才能执行反向堆栈(导航返回)。 这是示例应用程序的清单..
<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以启动它。
谢谢。
答案 0 :(得分:0)
为什么不尝试替换
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
带
intent.setFlags(FLAG_ACTIVITY_SINGLE_TOP);
通过这种方式,您将恢复父活动,并将在onNewIntent()
的{{1}}
答案 1 :(得分:0)
最终能够在意图行动的帮助下访问/启动活动:
@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();
}
用户可以从意图处理中获取操作..