android片段替换和删除

时间:2013-06-26 21:27:39

标签: android android-fragments

我有以下活动,它产生3个标签,并在每个标签中放入片段。

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和listener,它在点击时替换片段。

当我点击第二个标签时(在tabA上的列表视图中选择行后),听众添加标签而不是替换它。
发生这种情况是因为TabUnsellected正在删除错误的片段(它是first_tab,但是替换为listview选择行上的test_tab)。
我如何在TabUnselected上的ft上使用remove选项删除选项卡上的CURRENT片段,假设我在每个选项卡上总是有1个片段?

由于

1 个答案:

答案 0 :(得分:0)

通过在TabSelected:

上从ft.add更改为ft.replace来修复它
    ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_place, fragment);
    ft.commit();