2013-06-26 112 views
0

我有以下活動產生了3個選項卡,並將片段放在其中的每一個。Android片段替換和刪除

public class ClientActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_client); 
     ActionBar bar = getActionBar(); 
     bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     ActionBar.Tab tabA = bar.newTab().setCustomView(R.layout.tab_a_layout); 
     ActionBar.Tab tabB = bar.newTab().setCustomView(R.layout.tab_b_layout); 
     ActionBar.Tab tabC = bar.newTab().setCustomView(R.layout.tab_c_layout); 
     Fragment fragmentA = new firstTab(); 
     Fragment fragmentB = new secondTab(); 
     Fragment fragmentC = new thirdTab(); 
     tabA.setTabListener(new MyTabsListener(fragmentA)); 
     tabB.setTabListener(new MyTabsListener(fragmentB)); 
     tabC.setTabListener(new MyTabsListener(fragmentC)); 
     bar.addTab(tabA); 
     bar.addTab(tabB); 
     bar.addTab(tabC); 
    } 

    protected class MyTabsListener implements ActionBar.TabListener { 
     private Fragment fragment; 

     public MyTabsListener(Fragment fragment) 
     { 
      this.fragment = fragment; 
     } 

     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) 
     { 
      ft.add(R.id.fragment_place, fragment, null); 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      ft.remove(fragment);    
     } 
    } 
} 

在第一個片段(tabA)我有listview和偵聽器,取代單擊片段。

當我點擊第二個選項卡(在tabA上的listview上選擇行後),監聽器添加選項卡而不是替換它。
它發生的原因是TabUnsellected正在刪除錯誤的片段(它是first_tab,但替換爲listview選擇行上的test_tab)。
如何在TabUnselected上使用ft上的remove選項來刪除選項卡上的CURRENT片段,假設每個選項卡上始終有1個片段?

感謝

回答

0

由ft.add改變固定它ft.replace在TabSelected:

ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment_place, fragment); 
    ft.commit();