[英]Android Fragments are Duplicating/Recreating on Orientation Change
我正在嘗試在FrameLayout
容器中顯示兩個Fragments
。 我一次只顯示一個,然后根據我的應用程序邏輯隱藏另一個。 我相信每次更改設備方向時,它們都會重新創建! 我可以看到片段的重復部分相互重疊! 如何解決? 提前致謝。
public class MainActivity extends AppCompatActivity {
final Fragment oneFragment = oneFragment.newInstance();
final Fragment twoFragment = twoFragment.newInstance();
Fragment active = oneFragment;
final FragmentManager fm = getSupportFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// some other code
fm.beginTransaction().add(R.id.container, oneFragment, "1").commit();
fm.beginTransaction().add(R.id.container, twoFragment, "2").commit();
// onclick listener
if(condition) {
fm.beginTransaction().hide(active)
.show(oneFragment).commit();
} else {
fm.beginTransaction().hide(active)
.show(twoFragment).commit();
}
// some other code
活動重新啟動后,片段始終會自動從以前的狀態恢復。
為了避免這種現象,只需檢查一下savedInstanceState
是否為null。 如果為空-我們有一個新的活動實例,否則為-重新創建了活動(因此,無需再次添加片段-它們已經存在)。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
fm.beginTransaction().add(R.id.container, oneFragment, "1").commit();
fm.beginTransaction().add(R.id.container, twoFragment, "2").commit();
}
}
請參閱本文( 在運行時向活動添加片段到一節)中的其他信息,它將幫助您使用片段魔術:) https://developer.android.com/training/basics/fragments/fragment-ui。 html
嘗試這個:
if (condition) {
replaceFragment(oneFragment, "1")
} else {
replaceFragment(twoFragment, "2")
}
private void replaceFragment(Fragment fragment, String tag) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.addToBackStack(tag);
transaction.replace(R.id.container, fragment, tag);
transaction.commit();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.