2013-11-02 31 views
1

所以我寫了這個簡單的選項卡導航。它有兩個名爲「片段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); 
    } 
} 

回答

2

您需要使用的,而不是add()方法在你onTabSelected替換() () 方法。

+0

甜!謝謝你的幫助! –

相關問題