0

У меня есть простота, которая имеет простой FrameLayout в качестве ее макета. Я добавляю фрагмент с текстовым просмотром программно. Когда я меняю ориентацию, Android уничтожает фрагмент и активность его держателя, как ожидалось, но в следующий отдых, Android создает дополнительный фрагмент. Это увеличивается постепенно. Например, после 3-го изменения ориентации Android создает 4 новых фрагмента, и у меня есть только один новый оператор Fragment() в моем коде. В любом случае, я подготовил минимальный код длины, который воспроизводит это поведение.Android создает дополнительные фрагменты после того, как активность владельца разрушена с помощью изменения ориентации.

FragmentHolderActivity.java

import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 


public class FragmentHolderActivity extends Activity { 

    private final String TAG = "FragmentHolderActivity"; 

    private Fragment mFragment; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_fragment_holder); 

     mFragment = new TestFragment(); 

     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     fragmentTransaction.add(R.id.fragment_holder,mFragment); 
     fragmentTransaction.commit(); 
    } 

}

TestFragment.java

import android.os.Bundle; 
import android.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class TestFragment extends Fragment { 

    private final String TAG = "TestFragment"; 

    public TestFragment() { 
// Required empty public constructor 
    } 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.i(TAG,": Entered onCreate() for " + this.toString()); 
    } 

@Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     Log.i(TAG,": Entered onDestroy() for " + this.toString()); 
    } 

@Override 
    public void onDetach(){ 
     super.onDetach(); 
     Log.i(TAG, ": Entered onDetach() for " + this.toString()); 
    } 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
// Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_test, container, false); 
    } 

} 

activity_fragment_holder.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/fragment_holder" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

fragment_text.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.cagri.fragmentcrashtest.TestFragment"> 

    <!-- TODO: Update blank fragment layout --> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_blank_fragment" /> 

</FrameLayout> 

ответ

0

Проблема заключается в «новой части TestFragment()» в методе onCreate.

Попробуйте так:

FragmentManager fragmentManager = getFragmentManager(); 
mFragment = (TestFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG); 

// If not-null, it is currently being kept as the configuration changes 
if (mFragment == null) { 
     mFragment = new TestFragment(); 
     fragmentManager .beginTransaction().add(mFragment, FRAGMENT_TAG).commit(); 
} 
+0

Спасибо за ответ mate.Apparently Android воссоздает связанных фрагментов в деятельности, в процессе деятельности и отдыха, разработчикам пришлось проверить, если они должны создать новый. –

 Смежные вопросы

  • Нет связанных вопросов^_^