簡體   English   中英

Android片段正在方向更改時復制/重新創建

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM