安卓向上按钮不起作用



我有一个简单的应用程序。它由活动 A 和活动 B 组成。

当我从活动 A(从启动器图标)开始,然后导航到活动 B,然后点击向上按钮。我到达活动A.完美。

然而,当我从命令行启动活动 B(模拟另一个应用程序或启动此活动的通知)并点击向上按钮时,我只是被带到主屏幕。

这是我的设置:

活动A

public class ActivityA extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
}
});
}

}

活动B

public class ActivityB extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}

我的清单。请注意,父活动已定义,我的应用最小 api 为 16(因此父活动声明对 16 及更高版本有效)。

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ActivityA"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ActivityB"
android:exported="true"
android:label="@string/title_activity_b"
android:parentActivityName=".ActivityA"
android:theme="@style/AppTheme.NoActionBar" />
</application>

要从 cmd 行启动活动 B,我使用:adb shell am start com.example.demo/com.example.demo.ActivityB

编辑 1

根据这里的文档: https://developer.android.com/training/appbar/up-action.html

您无需在活动的 onOptionsItemSelected() 方法。相反,该方法应调用其 超类,如响应操作中所示。超类方法 通过导航到父活动来响应"向上"选择,作为 在应用清单中指定。

编辑 2:

只是为了踢,我在这里尝试了两个代码片段。一次一个,看看他们是否会做到这一点。但他们没有。活动 A 无法打开。活动 B 刚刚关闭。

https://developer.android.com/training/implementing-navigation/ancestral.html

@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);
}

@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);
}

发生了什么与预期?当我通过 cmd 行打开活动 B 并点击时,我希望在活动 B 关闭时转到活动 A。实际发生的是活动 B 刚刚关闭。

这是默认的 bahavior,向上导航按钮适用于Activity Stack,如果ActivityA不在堆栈中,Android将返回到上一个屏幕,在这种情况下是主页。

相关内容

  • 没有找到相关文章

最新更新