2014-10-04 130 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

相关问题