3つのタブがある設定アクティビティがあります(各タブにはフラグメントが含まれています)+メインアクティビティにはボタン行もあります-[OK]ボタンと[キャンセル]ボタンがあります。[OK]を押すと、次のようになります。
1)すべてのフラグメントからすべてのカスタム変数を取得します2)共有設定に保存します
しかし、フラグメント変数にアクセスするにはどうすればよいですか?私はこれを試しました:
メインアクティビティにタブを追加する:
ActionBar.Tab tab1 = actionbar.newTab().setText(res.getString(R.string.actSettingsTab1));
tab1.setTabListener(new MyTabsListener(new Tab1Fragment(), "tab1"));
actionbar.addTab(tab1);
//...similar for all tabs
これは私のタブリスナーです:
class MyTabsListener implements ActionBar.TabListener {
private Fragment fragment;
private String tag;
public MyTabsListener(Fragment fragment, String tag) {
this.fragment = fragment;
this.tag = tag;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// do nothing
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_container, fragment, tag);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
}
そして、これは私がフラグメントから変数を取得したい方法です:
Tab1Fragment tab1 = (Tab1Fragment) fm.findFragmentByTag("tab1");
Tab2Fragment tab2 = (Tab1Fragment) fm.findFragmentByTag("tab2");
Tab3Fragment tab3 = (Tab1Fragment) fm.findFragmentByTag("tab3");
しかし、それは奇妙です-findFragmentByTagは、選択されたタブに対してのみフラグメントを返します。それ以外の場合はnullを返します。したがって、tab1を選択して[OK]を押すと、findFragmentByTagはtab1のフラグメントを返しますが、他のフラグメントはnullを返します。
たぶん私は何か間違ったことをしているのか、私のトリング全体が間違った方向に進んでいるのかもしれません。親アクティビティのすべてのフラグメントから値を取得し、それらを共有設定に保存するにはどうすればよいですか?