Java 更改方向时操作栏选项卡中的错误

Java 更改方向时操作栏选项卡中的错误,java,android,android-fragments,tabs,Java,Android,Android Fragments,Tabs,所以我写了这个简单的标签导航。它有两个选项卡,分别称为“片段1”和“片段2”。如果您点击其中一个,它应该在内容区域显示相应的文本“片段1”或“片段2”。我的代码一开始运行良好 但是,当我将设备切换为横向时,文本会出错。它在同一点上显示1和2组合的片段。我认为两个文本同时显示。在这个错误发生后,文本仍然是我尝试更改选项卡的方式。当我从风景变为肖像时也会发生这种情况。这是什么原因造成的 MainActivity.java @Override protected void onCreate(Bundl

所以我写了这个简单的标签导航。它有两个选项卡,分别称为“片段1”和“片段2”。如果您点击其中一个,它应该在内容区域显示相应的文本“片段1”或“片段2”。我的代码一开始运行良好

但是,当我将设备切换为横向时,文本会出错。它在同一点上显示1和2组合的片段。我认为两个文本同时显示。在这个错误发生后,文本仍然是我尝试更改选项卡的方式。当我从风景变为肖像时也会发生这种情况。这是什么原因造成的

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActionBar ab = getActionBar();
    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tab = ab.newTab().setText(R.string.frag1).setTabListener(new MyTabListener(this, Fragment1.class.getName()));
    ab.addTab(tab);

    tab = ab.newTab().setText(R.string.frag2).setTabListener(new MyTabListener(this, Fragment2.class.getName()));
    ab.addTab(tab);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

private class MyTabListener implements ActionBar.TabListener
{
    private Fragment mFragment;
    private final Activity mActivity;
    private final String mFragName;

    public MyTabListener(Activity activity, String fragName) {
        mActivity = activity;
        mFragName = fragName;
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        mFragment = Fragment.instantiate(mActivity, mFragName);
        ft.add(android.R.id.content, mFragment);

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.remove(mFragment);
        mFragment = null;

    }

}
Fragment1.java

public class Fragment1 extends Fragment
{   
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
    {
        return inflater.inflate(R.layout.frag1, container, false);
    }
}
Fragment2.java

public class Fragment2 extends Fragment
{   
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance)
    {
        return inflater.inflate(R.layout.frag2, container, false);
    }
}

在onTabSelected()方法中,需要使用replace()而不是add()方法。

Sweet!谢谢你的帮助!