2013-06-12 40 views
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()方法的調用。但我不想每次都加載數據。這怎麼能實現?

回答

-1

使用片段的onCreate方法打擊web服務,並設置適配器只有當列表爲空或更新時... 現在你在OnCreateView中這樣做,每次調用時都選擇該選項卡。

+0

我應該在哪裏初始化我的所有視圖。如果我在oncreate()中執行它,則顯示nullpointer異常會導致oncreateview尚未調用。你能給我一個代碼片段嗎? – rawcoder064

相關問題