【问题标题】:Navigate back from settings activity从设置活动返回
【发布时间】:2020-06-26 16:16:35
【问题描述】:

我正在使用 Android Studio,因此我使用向导创建了一个 SettingsActivity,但我遇到的问题是无法使用中的“向上”箭头从该设置活动导航回主活动操作栏。

Actionbar 的设置如下所示:

private void setupActionBar() {
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        // Show the Up button in the action bar.
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

顺便说一句,Actionbar 不为空。
并且在 AndroidManifest 中设置了 parentActitvityName:

 <activity
        android:name=".SettingsActivity"
        android:label="@string/title_activity_settings"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.demo.app.MainActivity" />
 </activity>

但是,单击箭头没有任何作用。甚至 onOptionsItemSelected 都不会被触发。

似乎这是完全相同的问题 Action bar setDisplayHomeAsUpEnabled not working on ICS 但在同一个应用程序中从细节导航回概览活动可以正常工作。此外,我将 MinSDK 设置为 15,将 TargetSDK 设置为 23。

【问题讨论】:

    标签: android


    【解决方案1】:

    在您的 AppCompatPrefernceActivity 上覆盖 onOptionsItemSelected 方法并使其成为这样

       @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                // Respond to the action bar's Up/Home button
                case android.R.id.home:
                    super.onBackPressed();
                    return true;
            }
            return super.onOptionsItemSelected(item);
        }
    

    【讨论】:

    • 在 main-settings-activity 上没有调用该方法。
    • 您可以覆盖该方法。顺便说一句,我将编辑我的答案,将其复制并粘贴到您的活动中
    • 是的,这是我已经拥有的,但是当我点击“向上”时,不会调用此方法。
    • hmmm 奇怪,尝试删除这一行 actionBar.setDisplayShowHomeEnabled(true);
    • 你重写了 onCreateOptionsMenu 方法吗?
    【解决方案2】:

    Vspallas 的答案是正确的。错误在我这边。我在preferenceFragment 中有一个onOptionsItemSelected 方法,而不是在Activity 中。过失。

    【讨论】:

    • 你可以在片段中调用 getActivity().onBackPressed() 来达到同样的效果。
    【解决方案3】:

    您可以在设置活动中使用它

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    

    那么在 androidManifest 中就和你做的一样

    <activity
       android:name=".SettingsActivity"
       android:parentActivityName=".MainActivity"
       android:label="@string/title_activity_settings">
       <meta-data
          android:name="android.support.PARENT_ACTIVITY"
          android:value="com.example.app_name.MainActivity" />
    </activity>
    

    这个com.example.app_name是你的应用包名

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多