我有設置活動,其中有3個選項卡(每個選項卡包含片段)+在主要活動還有按鈕行 - 與按鈕確定,並取消。當我按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僅返回選定選項卡的片段,否則返回nu二。所以,當我選擇tab1並按下ok時,findFragmentByTag爲tab1返回片段,但爲其他人返回null。
也許我做錯了什麼,或者我的整個過程都是錯誤的方式。如何檢索父活動中所有片段的值並將它們保存到共享首選項?
好點。謝謝...順便說一句,我剛剛開始使用片段,但認真...你不覺得,他們讓代碼更難以閱讀(而不是更容易),因爲你必須認爲當片段狀態改變時總是保存所有內容,實現監聽器與父母的活動等進行交流......我的代碼比無碎片+更難理解的1/3。當然,文件碎片並不是很好 - 它不包含很多東西:( – qkx 2013-02-14 15:50:01
起初我也是這麼認爲的,但是一旦你習慣了稍微不同的做法,你會看到它們提供了你更高的代碼可重用性,它當然取決於你如何設計你的片段,並且需要一些練習來獲得這個概念的大部分內容,放鬆一下,閱讀很多並不斷提問;) – 2013-02-14 16:40:40