[英]Fragment visible behind last fragment and goes on
在活動中具有導航抽屜,並通過這些代碼行更改片段
switch (menuItem.getItemId()) {
case R.id.home:
menuItem.setChecked(true);
drawerLayout.closeDrawer(GravityCompat.START);
if (getSupportFragmentManager().findFragmentByTag("ranking") == null) {
getSupportFragmentManager()
.beginTransaction()
.add(R.id.list_view_container, new HomeFragment(),
"ranking")
.addToBackStack("ranking")
.setTransition(
FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
} else {
getSupportFragmentManager().popBackStack("ranking", 0);
}
return true;
case R.id.current_event:
menuItem.setChecked(true);
drawerLayout.closeDrawer(GravityCompat.START);
if (getSupportFragmentManager().findFragmentByTag("ranking1") == null) {
getSupportFragmentManager()
.beginTransaction()
.add(R.id.list_view_container, new CurrentEvents(),
"ranking1")
.addToBackStack("ranking1")
.setTransition(
FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
} else {
getSupportFragmentManager().popBackStack("ranking1", 1);
}
return true;
}
我希望片段保留在內存中,這樣就不應該一次又一次地重建它,而不能一次又一次地從Internet上獲取數據,所以我已經采用了上述方法來實現這一點,但是現在,當我通過導航抽屜更改片段時,一個片段正在替換另一個繼續,我還必須按返回按鈕=創建新片段以退出應用程序的次數。 我想要Backstack中的片段,但不希望這樣互相替換。 我一次只想要一種方法。 請幫忙
由於您使用的是add()
,因此以前的Fragment
不會從容器中刪除。
您應該使用replace()
對add()
的調用。 例如, case R.id.home
將變為:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.list_view_container, new HomeFragment(),
"ranking")
.addToBackStack("ranking")
.setTransition(
FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
我希望Fragment保留在內存中,這樣就不會一次又一次地重建它,而一次又一次地從Internet上獲取數據。
您可以嘗試使用Fragment
的setRetainInstance(true)
來執行此操作,但不建議這樣做(而且我從未使用過)。
另一種更合適的方法是使用Fragment
的onSaveInstanceState()
。 您可以在Developer Android上了解它。
您可以檢查此方案,希望它可以解決您的問題:-
嘗試從FragmentTransaction附加和分離片段。 當您移至下一個片段時,從FragmentTransaction分離最后一個片段,而當您想再次使用它時,請附加它。
請參閱示例代碼,了解如何分離和附加片段,它將為您提供幫助:
android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
AndroidFragment androidFragment = (AndroidFragment) fm.findFragmentByTag("android");
AppleFragment appleFragment = (AppleFragment) fm.findFragmentByTag("apple");
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
/** Detaches the androidfragment if exists */
if(androidFragment!=null)
ft.detach(androidFragment);
/** Detaches the applefragment if exists */
if(appleFragment!=null)
ft.detach(appleFragment);
/** If current tab is android */
if(tabId.equalsIgnoreCase("android")){
if(androidFragment==null){
/** Create AndroidFragment and adding to fragmenttransaction */
ft.add(R.id.realtabcontent,new AndroidFragment(), "android");
}else{
/** Bring to the front, if already exists in the fragmenttransaction */
ft.attach(androidFragment);
}
}else{ /** If current tab is apple */
if(appleFragment==null){
/** Create AppleFragment and adding to fragmenttransaction */
ft.add(R.id.realtabcontent,new AppleFragment(), "apple");
}else{
/** Bring to the front, if already exists in the fragmenttransaction */
ft.attach(appleFragment);
}
}
ft.commit();
`For Reference see this onTabChanged :` [http://wptrafficanalyzer.in/blog/creating-navigation-tabs-using-tabhost-and-fragments-in-android/][1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.