【发布时间】:2015-01-15 10:22:08
【问题描述】:
我有一个使用以下代码启动活动 A 的广播接收器
Intent appIntent = new Intent(context, A.class);
appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_FROM_BACKGROUND);
context.startActivity(appIntent);
A 活动启动正常,然后在里面按下一个按钮,使用此代码启动另一个活动 B
TaskStackBuilder tsb = TaskStackBuilder.create(this);
tsb.addParentStack(this);
Intent intent=new Intent(this, B.class);
tsb.addNextIntent(intent);
tsb.startActivities();
活动 B 开始正常,但是我按下后退按钮还是向上按钮活动 A 没有显示
这是清单字段中两个活动的定义
<activity android:name=".A" android:launchMode="singleTop"
android:label="@string/app_name" >
</activity>
<activity android:name=".B"
android:label="@string/app_name" android:parentActivityName="myPackage.A">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="myPackage.A" />
</activity>
在活动 B 我有以下代码
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.simplelistlayout);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public void onBackPressed() {
moveTaskToBack(true);
B.this.finish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
// Respond to the action bar's Up/Home button
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
};
我尝试调试,我认为问题是当我从广播接收器调用活动 A 时,FLAG_ACTIVITY_NEW_TASK 导致意图同时具有操作 (android.intent.action.MAIN) 和类别 (android.intent.category.LAUNCHER ) 并且活动 A 不是我的启动器活动,所以当活动 B 收到后退操作或按下向上按钮时,我看到打算正确地拥有活动 A,但使用启动器活动的操作和类别,我该如何解决这个问题?
【问题讨论】:
-
你为什么要以这种复杂的方式从
A开始B?为什么不直接使用Intent intent=new Intent(this, B.class); startActivity(intent);开始B?这也可能会给您带来问题。
标签: android android-intent android-activity