hos*_*oss 5 android android-manifest android-lifecycle android-activity android-actionbar
我遇到了活动导航的问题,我无法弄清楚我做错了什么.
我有一个MainActivity和一个SettingsActivity但是使用Back和Up(在操作栏上)有两个不同的设置活动结果.
例如,如果我按下后退按钮,我会在以下内容中获得以下生命周期回调MainActivity:
V/lifeCycle: onOptionsItemSelected
V/lifeCycle: onPause
V/lifeCycle: onSaveInstanceState-Bundle[..]
V/lifeCycle: onStop
<< PRESS BACK BUTTON >>
V/lifeCycle: onRestart
V/lifeCycle: onStart
V/lifeCycle: onResume
V/lifeCycle: onPostResume
Run Code Online (Sandbox Code Playgroud)
如果我按下导航向上按钮,我会得到以下结果:
V/lifeCycle: onOptionsItemSelected
V/lifeCycle: onPause
V/lifeCycle: onSaveInstanceState-Bundle[..]
V/lifeCycle: onStop
<< PRESS NAV UP >>
V/lifeCycle: onDestroy // Problem
V/lifeCycle: onCreate // Seems
V/lifeCycle: onStart // Here
V/lifeCycle: onResume
V/lifeCycle: onPostResume
Run Code Online (Sandbox Code Playgroud)
问题是,当我按下Nav UP我的主要活动被销毁并重新创建意味着我放松了所有视图状态,但按下后退按钮不会这样做.
我不确定这是不是我的开始PreferenceActivity:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
Run Code Online (Sandbox Code Playgroud)
或者我的意图如何AndroidManifest.xml配置:
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings"
android:parentActivityName=".MainActivity">
<intent-filter>
<category android:name="android.intent.category.PREFERENCE" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
这可能会导致问题,或者这只是我需要覆盖的正确行为,如果是这样,那么"正确"的覆盖方式是什么?
小智 10
去掉
机器人:parentActivityName = "MainActivity"
来自SettingsActivity的清单文件.
编辑:上面的步骤不再需要.
在SettingsActivity类中,执行以下操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case android.R.id.home:
this.finish();
return (true);
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)