我通过深层链接启动了活动 B,我希望活动 A在单击向上按钮时启动。
这是我的清单
<activity
android:name=".ui.activity.B"
android:label="@string/title_activity_search"
android:parentActivityName=".ui.activity.A" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.activity.A"/>
...
<!-- deep link -->
...
</activity>
B 活动代码在这里。
public class B extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toolbar vToolbar = ((Toolbar) findViewById(R.id.toolbar));
setSupportActionBar(vToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
}
您可以复制/粘贴此代码,如果活动 B扩展 FragmentActivity,它就会起作用。但是我需要它与AppCompatActivity一起工作。我做错了什么?
您正在从另一个应用程序打开Activity
。因此,堆栈中没有其他可用的Activity
。因此,当您按下向上按钮时,您不应该让父Activity
出现在前面。如果目标父活动位于任务的后退堆栈中,则会将其前移。 来自开发人员文档。
但是,
navigateUpFromSameTask()
仅当 应用程序是当前任务的所有者(即,用户开始了此任务 应用中的任务)。如果这不是真的,并且您的活动已开始 在属于其他应用程序的任务中,向上导航应该 创建属于你的应用的新任务,这需要你 创建新的后退堆栈。
因此,在您的情况下,您需要执行文档中所述的类似操作。
如果您的活动提供了任何意图过滤器,允许其他应用执行以下操作 启动活动,您应该实现
onOptionsItemSelected()
回调,如果用户在输入后按向上按钮 您在其他应用的任务中的活动,您的应用启动新任务时 向上导航之前的相应后退堆栈。您可以通过先调用
shouldUpRecreateTask()
进行检查来执行此操作 当前活动实例是否存在于其他应用中 任务。如果返回 true,则使用TaskStackBuilder
.否则,您可以使用navigateUpFromSameTask()
方法如上所示。
@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)) {
// This activity is NOT part of this app's task, so create a new task
// when navigating up, with a synthesized back stack.
TaskStackBuilder.create(this)
// Add all of this activity's parents to the back stack
.addNextIntentWithParentStack(upIntent)
// Navigate up to the closest parent
.startActivities();
} else {
// This activity is part of this app's task, so simply
// navigate up to the logical parent activity.
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
}