3 つのフラグメントと 1 つのアクティビティがあります。ActionBar
のタブを有効にして、3 つのタブのそれぞれにを割り当てたいと考えていFragment
ます。それを正しく接続するにはどうすればよいですか?
元の投稿
Google I/O アプリをガイドとして使用して開発中のアプリがあります。にタブを実装しましたActionBar
。タブレットの向きが変わるまで動作しているようです。たとえば、3 つのタブすべてにFragment
. それらをうまく切り替えることができますが、方向を変更すると、Fragment
最後に表示していたものが表示されたままになりますが、タブをクリックしてもビューが変更されなくなります...それらが切断されたように. 予想どおり、元の向きに戻っても「修正」されません。
状態の保存と復元を調べましたが、それらがどのように役立つかわかりません。
編集
モジュール レベル:
Fragment mFragmentA = (Fragment) new AFragmentTab();
Fragment mFragmentB = (Fragment) new BFragmentTab();
Fragment mFragmentC = (Fragment) new CFragmentTab();
私は活動の中にこのようなものを持っていますonCreate
:
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
ActionBar.Tab tabA = actionBar.newTab().setText("text a");
ActionBar.Tab tabB = actionBar.newTab().setText("text b");
ActionBar.Tab tabC = actionBar.newTab().setText("text c");
tabA.setTabListener(this);
tabB.setTabListener(this);
tabC.setTabListener(this);
actionBar.addTab(tabA);
actionBar.addTab(tabB);
actionBar.addTab(tabC);
そしてTabListener
このような:
編集これは削除されます
class MyTabListener implements ActionBar.TabListener {
private Fragment mFragment;
// Called to create an instance of the listener when adding a new tab
public MyTabListener(Fragment fragment) {
mFragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragment_content, mFragment, null);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(mFragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// do nothing
}
}
編集
を移動しましたTabListener
。別のクラスにする代わりに、 に を実装しTabListener
ますActivity
。次に、Selected
andUnselected
メソッドには次のようなものがあります。
public void onTabSelected(Tab tab, FragmentTransaction ft) {
switch (tab.getPosition()) {
case 0:
ft.add(R.id.fragment_content, mFragmentA, null);
break;
case 1:
ft.add(R.id.fragment_content, mFragmentB, null);
break;
case 2:
ft.add(R.id.fragment_content, mFragmentC, null);
break;
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
switch (tab.getPosition()) {
case 0:
ft.remove(mFragmentA);
break;
case 1:
ft.remove(mFragmentB);
break;
case 2:
ft.remove(mFragmentC);
break;
}
}
それは今でも同じことをしています。何が起こっているのか本当にわかりません。