comment économiser de l'état avec onSaveInstanceState et onRestoreInstanceState tout changement d'orientation
J'ai presque tout lu article à propos de onSaveInstanceState et onRestoreInstanceState dans le débordement de la Pile, mais je ne peux pas résoudre mon problème.
J'ai un affichage de texte et le bouton dans mon main.java et pendant que vous cliquez sur le bouton de la valeur d'un ( un est une variable int) variable augmente et les afficher dans l'affichage de texte, mais, lorsque je tourne mon téléphone ( changement d'orientation), l'affichage du texte de réinitialisation.
Je remplace onSaveInstanceState et onRestoreInstanceState mais ça ne fonctionne pas.
encore une chose, j'ai spéciale layout-land.xml de fichier pour le format paysage.
voici mon code
import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class main extends Activity {
/** Called when the activity is first created. */
public int a = 0;
public String fonts="TAHOMA.TTF";
TextView tv = (TextView) findViewById(R.id.salavat);
Button b = (Button) findViewById(R.id.showsalavat);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b.setOnClickListener(new Button.OnClickListener() {
public void onClick(View arg0) {
a++;
tv.setText(""+a);
}
});
}
@Override
protected void onSaveInstanceState(Bundle SavedInstanceState) {
super.onSaveInstanceState(SavedInstanceState);
SavedInstanceState.putInt("salavat-count", a);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
a= savedInstanceState.getInt ("salavat-count");
}
}
et voici mon main.xml
<TextView android:id="@+id/shoma" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="right" android:text="@string/shoma" android:textSize="20sp" /> <Button android:id="@+id/showsalavat" android:layout_width="fill_parent" android:layout_height="150dp" android:text="+" android:textSize="100sp" /> <TextView android:id="@+id/eltemas" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="55dp" android:text="@string/eltemas" /> <TextView android:id="@+id/salavat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="35sp" /> <TextView android:id="@+id/ferestade" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="24dp" android:text="@string/salavat" android:textSize="20sp" /> </LinearLayout>
J'ai vraiment besoin d'aide.
J'apprécie vraiment votre aide.
Je sais que j'allais
edit
et de faire le ménage mais j'ai été comme W...T...Hu r droit parce que je suis un frais homme dans android.
cela est très utile developer.android.com/training/basics/activity-lifecycle/...
OriginalL'auteur Reza Shek | 2012-04-21
Vous devez vous connecter pour publier un commentaire.
Je pense que ce code est utile pour vous..
OriginalL'auteur Durgpal Singh
Comme une mise à jour, vous pourriez tout simplement
freezesText="true"
http://developer.android.com/reference/android/R.attr.html#freezesText
Ou
C'est l'exemple le plus simple:
Mais avoir un intérieur de classe qui représente votre état sera beaucoup plus agréable lorsque vous commencez à économiser beaucoup d'objets sur un changement d'orientation.
À l'aide d'un intérieur de classe, il devrait ressembler à ci-dessous. Vous pouvez imaginer que vous avez plus de et plus d'état d'économiser l'intérieur de la classe, il est beaucoup plus facile (moins salissant) à la gestionnaire.
OriginalL'auteur Blundell
vous devez reconstruire votre vue des composants avec valeurs enregistrées.
remplissez votre textview avec la valeur enregistrée.
OriginalL'auteur Nesim Razon
Voulez-vous vraiment utiliser ces méthodes ?
Ici, vous allez une sorte de solution à votre problème, il suffit de mettre ceci dans votre fichier de manifeste
Si vous faites cela, votre Activité ne sera pas recharger tous les points de vue réinitialisation de leurs valeurs lorsque vous modifiez l'orientation
Ce n'est pas une solution, c'est une solution de contournement à l'orientation redémarre. Votre activité peut être redémarré pendant un certain nombre d'événements, des changements d'orientation est un seul d'entre eux.
Il est largement et publiquement conseillé d'éviter cette pratique, car elle a cessé d'être encore une solution de contournement comme android a évolué.
OriginalL'auteur digulino
Une négligence grave erreur.
Vous devez d'abord passer les données à onSavedInstanceState() et l'appel onSavedInstanceState() . Si vous pensez que vous vous rendrez compte que son inutile de faire appel onSavedInstanceState avant de transmettre les données à enregistrer. il l'habitude d'enregistrer l'activité de l'instance comme onSavedInstanceState ()est appelée avant..
Il devrait être aussi :
OriginalL'auteur DUDE_MXP