2014-10-04 188 views
0

我知道這個問題問了很多次。但是我沒有得到那個傳言。我有一個包含兩個標籤的佈局。當我切換標籤時,他們每次都會重新加載。許多人建議使用viewpager。但我對viewPager一無所知。我的項目即將完成。如何停止重新加載片段

我的佈局代碼:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_devices); 

    mPreferences = getSharedPreferences(PreferencesManager.SCOPE, 
      MODE_PRIVATE); 

    mBundle = getIntent().getExtras(); 

    try { 
     rl = (RelativeLayout) findViewById(R.id.mainLayout); 
     //((Object) rl).setOffscreenPageLimit(2); 
     fragMentTra = getFragmentManager().beginTransaction(); 
     ActionBar bar = getActionBar(); 
     bar.addTab(bar.newTab().setText(TAB_NAME1).setTabListener(this)); 
     bar.addTab(bar.newTab().setText(TAB_NAME2).setTabListener(this)); 

     bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     bar.show(); 

    } catch (Exception e) { 
     e.getMessage(); 
    } 

} 

FragmentMine fram1; 
FragmentTransaction fragMentTra = null; 
FragmentAll fram2; 


@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 

    if (tab.getText().equals(TAB_NAME1)) { 
     try { 
      rl.removeAllViews(); 
     } catch (Exception e) { 
     } 
     fram1 = new FragmentMine(); 
     fragMentTra.addToBackStack(null); 
     fragMentTra = getFragmentManager().beginTransaction(); 
     fragMentTra.add(rl.getId(), fram1); 
     fragMentTra.commit(); 
    } else if (tab.getText().equals(TAB_NAME2)) { 
     try { 
      rl.removeAllViews(); 
     } catch (Exception e) { 
     } 
     fram2 = new FragmentAll(); 
     fragMentTra.addToBackStack(null); 
     fragMentTra = getFragmentManager().beginTransaction(); 
     fragMentTra.add(rl.getId(), fram2); 
     fragMentTra.commit(); 
    } 
} 

切換時,如何停止重裝標籤?

+0

*如何在切換時停止重新加載標籤?* - 您停止創建這些碎片的新實例,然後附加它們o集裝箱。 – Luksprog 2014-10-04 10:15:31

+0

你能簡單地解釋@Luksprog – SGG 2014-10-04 10:16:52

+0

每次你選擇一個標籤,你就會創建一個新的片段並將其添加到容器中。如果你想保留這些片段然後存儲它們並使用附加/分離事務。 – Luksprog 2014-10-04 10:34:36

回答

1

正如Rik指出的那樣,你實例化一個新Fragment通過:

fram1 = new FragmentMine(); 

你需要通過覆蓋onSaveInstanceState(),以節省您的片段狀態:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    // Whatever is there to save 
} 
+0

你可以舉一個例子代碼? – SGG 2014-10-04 10:44:43

+0

*片段應該是singletons * - 不,它們不是,特別是對它們的限制之一是使默認構造函數可見。如果您引用的是另一個約定的newInstance()方法。 – Luksprog 2014-10-04 10:51:20

+0

@Luksprog嗯,我不像你那麼有經驗。那麼使用片段的正確方法是什麼? – 2014-10-04 10:58:04