1
嗨,我正在製作選項卡使用片段。這裏是我的代碼生成tabing:停止刷新數據每次在GridView中使用片段更改選項卡
private static void addTab(QatarAuctionHomeTabActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
// Attach a Tab view factory to the spec
tabSpec.setContent(activity.new TabFactory(activity));
String tag = tabSpec.getTag();
tabInfo.fragment = activity.getSupportFragmentManager().findFragmentByTag(tag);
if (tabInfo.fragment != null && !tabInfo.fragment.isDetached()) {
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.detach(tabInfo.fragment);
ft.commit();
activity.getSupportFragmentManager().executePendingTransactions();
}
tabHost.addTab(tabSpec);
}
這裏是我的onTabChanged()偵聽器
public void onTabChanged(String tag) {
// TODO Auto-generated method stub
TabInfo newTab = this.mapTabInfo.get(tag);
if (mLastTab != newTab) {
FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
if (mLastTab != null) {
if (mLastTab.fragment != null) {
ft.detach(mLastTab.fragment);
}
}
if (newTab != null) {
if (newTab.fragment == null) {
newTab.fragment = Fragment.instantiate(this,
newTab.clss.getName(), newTab.args);
ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag);
} else {
ft.attach(newTab.fragment);
}
}
mLastTab = newTab;
// ft.addToBackStack(null);
ft.commit();
this.getSupportFragmentManager().executePendingTransactions();
}
}
我在裏面加入了片段與GridView的(從網絡獲取數據加載網格)。但我的問題是,當我在標籤之間導航時,每次加載數據時再次轉到網格選項卡。 onCreateview()被調用並且每次加載數據。下面是網格視圖的代碼:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.product_list_layout, container,
false);
Log.e("oncreateview", "Aise");
initiateServerParameters();
getUserDataFromPreference();
initialize();
setUpGrid();
requestDataFromWeb();
return view;
}
我知道ft.attach(newTab.fragment)方法再次重新創建所述片段的視圖和使oncreateview()方法的調用。但我不想每次都加載數據。這怎麼能實現?
我應該在哪裏初始化我的所有視圖。如果我在oncreate()中執行它,則顯示nullpointer異常會導致oncreateview尚未調用。你能給我一個代碼片段嗎? – rawcoder064