0

タブ内でフラグメントを切り替えるにはどうすればよいですか?

私のアプリケーションには、AFragment、BFragment、CFragment の 3 つのフラグメントが含まれています。これらのフラグメントは、それぞれ独自のレイアウト ファイルに対応しています。AFragment には Button が含まれ、BFragment と CFragment には TextView があります。activity_main という名前の 4 番目のレイアウト ファイルがあります。

現在、MainActivity、AFragment、BFragment、CFragment の 4 つのクラスがあります。クラス 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 には、タブ AFragment および BFragment の ID 'fragment_container' を持つ LinearLayout のみが含まれています。AFragmentのボタンをクリックすると、AFragment全体がCFragmentに切り替わるようになりました。どうすればこれを達成できますか?ありがとうございました。

(編集)次のことを行いましたが、起動時にアプリがクラッシュしました。私は何を間違えましたか?

ActionBar シーケンスのすぐ下にある MainActivity.java に次を追加しました。

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
  • アクティビティの (サポート) フラグメント マネージャーを使用してフラグメント トランザクションを取得します。
  • onTabSelected で行ったように、AFragment を CFragment に置き換えます
  • トランザクションをコミットします。

また、注意してください:

  • フラグメントに参照を保持しないでください。実際にガベージ コレクションが発生するのを防ぎます。毎回ではなく、一度フラグメントを作成する必要があります。TabSelected で、フラグメントがフラグメント マネージャーによって認識されているかどうかを確認します (findFragmentByTag を使用)。そうでない場合は、作成します。その場合は、再度交換してください。
  • タブごとにリスナーを共有する必要はありません。
于 2013-05-18T13:22:28.060 に答える