我有设置活动,它有 3 个选项卡(每个选项卡包含片段)+ 在主要活动中还有按钮行 - 按钮 OK 和 Cancel。当我按 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。
也许我做错了什么,或者我的整个路线都是错误的。如何从父活动中的所有片段中检索值并将它们保存到共享首选项?