在我的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)都会出现此问题。
答案 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。所以告诉我你什么时候完成,或任何其他解决方案。