2

在我的 Android 应用程序中,我使用带有选项卡的操作栏在显示选项卡内容的片段之间切换。一切正常,直到方向改变:然后 Android 开始将小部件绘制在彼此之上,以便片段的内容混合在一起。我的TabListener

private class TabListener implements ActionBar.TabListener {
    private final Activity mActivity;
    private final String mTag;

    public TabListener(Activity activity, String tag) {
        mActivity = activity;
        mTag = tag;
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        Fragment mFragment = MyActivity.this.getSupportFragmentManager().findFragmentByTag(mTag);
        if (mFragment == null) {
            mFragment = new MyFragment();
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(mFragment);
        }
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
        Fragment mFragment = MyActivity.this.getSupportFragmentManager().findFragmentByTag(mTag);
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
        // Do nothing
    }
}

我唯一注意到的是,在每次方向更改时,onTabUnselected()都不会被调用,但仍会onTabSelected()被调用(因此当前选项卡将被附加两次,而不会在两者之间分离)。如果这是问题所在,我不知道如何解决。如果这不是问题,我不知道在哪里看。如果有人有建议,我会很高兴。

旁注:我正在使用 ActionBarSherlock 的操作栏。这个问题出现在我测试过的所有 Android 版本(2.3、4.0、4.1)上。

4

1 回答 1

1

我不确定,但您可以按照以下步骤操作

  • 在您的 Activity onCreate() 方法之前获取 Bundle 参考。

    捆绑 b1;

  • 在您的 onCreate() 方法中,将 Bundle 值放入 b1

    @Override
    public void onCreate(Bundle savedInstanceState) {b1=savedInstanceState;
    

    ...................... }

  • onTabSelected在您的方法中使用此 b1作为

    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        Fragment mFragment = MyActivity.this.getSupportFragmentManager().findFragmentByTag(mTag);
    
    
     if (b1!=null){
     ft.detach(mFragment);
    

//和其余代码

   ................}
        }

它是一个结论,我在处理片段时已经得出结论,但我还没有使用 TabListener 完成它。所以当你完成时告诉我,或任何其他解决方案。

于 2012-09-25T12:33:29.853 回答