0

如何在选项卡内切换片段?

我的应用程序包含三个片段,AFragment、BFragment 和 CFragment。这些片段又对应着自己的布局文件:AFragment 包含一个 Button,而 BFragment 和 CFragment 有 TextView。还有第四个布局文件,名为 activity_main。

现在,我有四个类,MainActivity、AFragment、BFragment 和 CFragment。AFragment、BFragment、CFragment 类只有典型的每个都包含 OnCreateView。

MainActivity 包含以下内容:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    appContext = getApplicationContext();

    //ActionBar
     ActionBar actionbar = getActionBar();
     actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

     ActionBar.Tab PlayerTab = actionbar.newTab().setText("Fragment A");
     ActionBar.Tab StationsTab = actionbar.newTab().setText("Fragment B");

     Fragment PlayerFragment = new AFragment();
     Fragment StationsFragment = new BFragment();

     PlayerTab.setTabListener(new MyTabsListener(PlayerFragment));
     StationsTab.setTabListener(new MyTabsListener(StationsFragment));

     actionbar.addTab(PlayerTab);
     actionbar.addTab(StationsTab);

然后是 TabListener:

class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;

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

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    Toast.makeText(MainActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show();
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    ft.replace(R.id.fragment_container, fragment);
}

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

}

如您所见,activity_main.xml 仅包含一个 LinearLayout,其 id 为“fragment_container”,用于选项卡 AFragment 和 BFragment。现在我希望它以这样的方式单击 AFragment 中的按钮将整个 AFragment 切换到 CFragment。我怎样才能做到这一点?谢谢你。

(编辑)我做了以下但我的应用程序在启动时崩溃了。我做错了什么?

我在我的 MainActivity.java 上添加了以下内容,就在 ActionBar 序列的下方:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
appContext = getApplicationContext();

//ActionBar
....
....
....
Button mButton = (Button) findViewById(R.id.button1);
    mButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            CFragment fragment = new CFragment();
            fragmentTransaction.add(R.id.fragment_container, fragment);
            fragmentTransaction.commit();
        }
    });
4

1 回答 1

0
  • 使用您活动的(支持)片段管理器获取片段事务。
  • 用 CFragment 替换 AFragment,就像在 onTabSelected 中所做的那样
  • 提交您的交易。

另外,请注意:

  • 不要在你的片段上保留引用,你实际上会阻止垃圾收集的发生。您应该创建一次片段,而不是每次。在 TabSelected 中,检查片段管理器是否知道片段(使用 findFragmentByTag)。如果没有,请创建它。如果是,只需重新更换即可。
  • 分享你的听众,你不需要一个标签。
于 2013-05-18T13:22:28.060 回答