方向改变后,在片段中叠加小部件

时间:2012-09-25 11:55:39

标签: android android-fragments android-actionbar actionbarsherlock

在我的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的Action Bar。我测试的所有Android版本(2.3,4.0,4.1)都会出现此问题。

1 个答案:

答案 0 :(得分: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。所以告诉我你什么时候完成,或任何其他解决方案。