0
我在我的應用程序的新版本中使用ActionBarSherlock和TabViewPager,並且我試圖在某個選項卡處於活動狀態時執行某些代碼僅限。首先,讓我告訴你如何設置我的TabHost並將碎片添加到它。片段具體onResume
private void intialiseViewPager() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, TabFragment1.class.getName()));
fragments.add(Fragment.instantiate(this, TabFragment2.class.getName()));
if (appVersionV3()) {
fragments.add(Fragment.instantiate(this, TabFragment3.class.getName()));
}
this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
//
this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
this.mViewPager.setAdapter(this.mPagerAdapter);
this.mViewPager.setOnPageChangeListener(this);
}
/**
* Initialise the Tab Host
*/
private void initialiseTabHost(Bundle args) {
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
TabInfo tabInfo = null;
TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab1").setIndicator("Calculator"), (tabInfo = new TabInfo("Calculator", TabFragment1.class, args)));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab2").setIndicator("Tracker"), (tabInfo = new TabInfo("Tracker", TabFragment2.class, args)));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
if (appVersionV3()) {
TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab3").setIndicator("Food List"), (tabInfo = new TabInfo("FoodList", TabFragment3.class, args)));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
}
// Default to first tab
//this.onTabChanged("Tab1");
//
mTabHost.setOnTabChangedListener(this);
}
private static void AddTab(TabsViewPagerFragmentActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
// Attach a Tab view factory to the spec
tabSpec.setContent(activity.new TabFactory(activity));
tabHost.addTab(tabSpec);
}
我的第一個想法是從Activity onTabChanged調用一個片段的方法,但什麼都行不通。看到我的下面的嘗試 - 它所做的只是強制關閉應用程序,如果需要,我可以獲取此崩潰的日誌。
public void onTabChanged(String tag) {
//TabInfo newTab = this.mapTabInfo.get(tag);
int pos = this.mTabHost.getCurrentTab();
mTabHost.getCurrentTabView().invalidate();
this.mViewPager.setCurrentItem(pos);
if (pos == 1) {
TabFragment2 tabFragment = (TabFragment2) getSupportFragmentManager().findFragmentByTag("Tracker");
tabFragment.calculatePoints();
}
}
似乎也該片段的得到的onResume只要主活動啓動,所以我不能打電話的有內部片段特定代碼檢測改變調用。
我唯一的想法是使用onResumeFragments()
,但似乎沒有爲類型SherlockFragment
定義 - 不確定這是ActionBarSherlock的錯誤還是它應該是錯誤的。
任何幫助將不勝感激!
您可以發佈使用'onTabChanged'時發生的異常嗎?這是一個'NullPointerException'? – Luksprog
是的,它是一個NullPointerException - 我以爲我原本沒有正確引用Tab2,但提案填充了我在該片段中的所有函數/方法。 – mattdonders
我沒有完全得到你的評論。回調中的空值是什麼?我的假設是'tabFragment'變量是'null',因爲片段管理器沒有找到它(如果是這種情況,請發佈你的'ViewPager'的適配器代碼)。如果另一個變量爲空,並拋出異常指出並給出有關它的使用的更多細節。 – Luksprog