我有一个简单的应用程序。 它由活性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行启动ActivityB我用: adb shell am start com.example.demo/com.example.demo.ActivityB
编辑1
据此间文档: https://developer.android.com/training/appbar/up-action.html
你并不需要赶在活动的onOptionsItemSelected()方法的后续行动。 取而代之的是,该方法应该调用它的父类,如图应对措施。 超类方法导航到父活动,如应用程序清单中指定响应向上选择。
编辑2:
只是踢,我想这两个代码片段在这里。 一次一个,看看他们会做的伎俩。 但他们没有。 ActivityA不开。 ActivityB只是关闭。
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);
}
这是怎么回事VS预期? 当我通过CMD线打开ActivityB和撞了上去,我希望去ActivityA而ActivityB关闭。 而实际上,这只是ActivityB关闭。