0

我有 4 个活动,如下所示:

MainActivity -> Activity B -> Activity C
              \ Activity A /

左侧的 Activity 是右侧 Activity 的父级。

我正在使用 SherlockActionBar 提供向上导航。

“默认”路径是MainActivity -> Activity B > Activity C,它在每部手机上都能完美运行,我可以上去C > B > Main

在 Android 2.3 上,When I'm going Main > A > C,向上导航C > B > Main,这是意料之中的。

在 Android 4.1.2 (Galaxy S3) 上,使用相同的路径Main > A > C,向上导航确实如此C > Main,它完全错过Activity B了逻辑父级。

这是我的一些AndroidManifest.xml(我删除了包名)

    <activity
        android:name="my.package.ActivityA"
        android:label="@string/title_activity_a"
        android:parentActivityName="my.package.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="my.package.MainActivity" />
    </activity>
    <activity
        android:name="my.package.ActivityB"
        android:label="@string/title_activity_b"
        android:parentActivityName="my.package.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="my.package.MainActivity" />
    </activity>
    <activity
        android:name="my.package.ActivityC"
        android:label="@string/title_activity_c"
        android:parentActivityName="my.package.ActivityB" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="my.package.ActivityB" />
    </activity>

我不知道我是否足够清楚,这里有人有同样的问题:ActionBar UP navigation 混淆

4

1 回答 1

0

如果您使用的是选项卡导航,那么下面的代码可以帮助您:

public class MainActivity extends ActionBarActivity implements TabListener{

    ActionBar actionBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          actionBar = getSupportActionBar();
          actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
          actionBar.setDisplayHomeAsUpEnabled(true);
          tab=actionBar.newTab();
          tab.setText("HOME");
          tab.setTabListener(this);
          actionBar.addTab(tab);

        }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
             case android.R.id.home:
                if (android.os.Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH){
                    actionBar.setSelectedNavigationItem(0);
                }else{
                    Intent upIntent = new Intent(this, MainActivity.class);
                    NavUtils.navigateUpTo(this, upIntent);
                }
            return true;
         }
         return super.onOptionsItemSelected(item);
    }
}
于 2013-11-15T19:32:28.877 回答