2012-10-15 1 views
2

J'ai un problème avec l'enregistrement de l'état du fragment. J'essaie d'utiliser setRetainInstance, mais ne peux pas le faire fonctionner (((je change un état à 2 en utilisant button1, mais après avoir changé l'orientation de l'écran je vois 1 lorsque vous appuyez sur button2. Où est mon erreur?Fragments Android setRetainInstance (true) ne fonctionne pas (bibliothèque de support Android)

public class TestFragment extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     setRetainInstance(true); 
     super.onCreate(savedInstanceState); 
    } 

    private String state = "1"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_layout, container, false); 

     //button for changing state 
     ((Button)view.findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       state = "2"; 
      } 
     }); 

     //button for showing state 
     ((Button)view.findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     return view; 
    } 

} 

EDIT

Activité:

public class MainActivity extends FragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

} 

mise en page d'activité:

<RelativeLayout 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" > 

    <fragment 
     android:name="ru.ee.TestFragment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     /> 

</RelativeLayout> 

mise en page de Fragment:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Change to 2" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Show" /> 

</LinearLayout> 

XML Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="ru.ee.testfrag" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="ru.ee.MainActivity" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Répondre

13

Votre fragment ne se re-utilisé si vous donnez le fragment un ID dans la mise en page, changer

<fragment 
    android:name="ru.ee.TestFragment" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 

être

<fragment 
    android:id="@+id/a_fragment" 
    android:name="ru.ee.TestFragment" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 
+1

Il wooooooooooooooorks !!!!!!!! =)))) Merci beaucoup !!!!!!!!! ! – j2esu

+1

Merci beaucoup! Chercher sans fin ce genre de choses est vraiment mauvais pour ma santé. Je suis tellement content que ce soit fini! – Jozua

0

Il n'y a rien de mal avec le code affiché. Si le fragment est correctement implémenté, il devrait vous donner un état de 2. Peut-être pourriez-vous publier votre activité et vos fichiers xml. Il doit y avoir une erreur ailleurs.

+0

i ajouter des codes d'activité et xml, s'il vous plaît le regarder si vous avez un peu de temps. J'ai déjà regardé ce code une centaine de fois, mais ne peux pas comprendre où est mon erreur (( – j2esu

Questions connexes