2010-11-06 23 views
0

J'ai un tableau dans res/values/array.xml.Aléatoire Changements de mots générés lors du basculement entre portrait et paysage

<string-array name="list"> 
    <item>string 1</item> 
    <item>string 2</item> 
    <item>string 3</item> 
</string-array> 

Et ceci est mon code Java sans les instructions d'import.

public class Study extends Activity { 

    private String[] myString; 
    public static final Random rgenerator = new Random(); 

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

     Resources res = getResources(); 

     myString = res.getStringArray(R.array.list); 

     String q = myString[rgenerator.nextInt(myString.length)]; 

     TextView tv = (TextView) findViewById(R.id.word); 
     tv.setText(q); 

    } 
} 

Il affiche un élément aléatoire de la array.xml dans un TextView avec l'identifiant de mot. Tout fonctionne bien. C'est jusqu'à ce que je passe du portrait au paysage, ou vice versa, puis il affiche un autre élément aléatoire. Quand je passe d'un endroit à l'autre, je voudrais qu'il garde le même élément affiché à l'origine. Comment ferais-je cela?

Répondre

0

Enfin compris. J'avais besoin de onSaveInstanceState() pour trouver la chaîne et la stocker, puis onRestoreInstanceState() pour l'afficher au bon endroit après le redémarrage de l'activité. Voici le code et merci sincèrement pour l'aide. comment pourrais-je faire

Étude public class activité {

private String[] myString; 
public static final Random rgenerator = new Random(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.study); 

    Resources res = getResources(); 

    myString = res.getStringArray(R.array.list); 

    String q = myString[rgenerator.nextInt(myString.length)]; 

    TextView word = (TextView) findViewById(R.id.word); 
    word.setText(q); 

} 

public void onSaveInstanceState(Bundle savedInstanceState) { 

    TextView wordTextView = (TextView)findViewById(R.id.word); 
    String wordText = wordTextView.getText().toString(); 

    savedInstanceState.putString("wordText", wordText); 
    super.onSaveInstanceState(savedInstanceState); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    TextView wordTextView = (TextView)findViewById(R.id.word); 

    String wordText = savedInstanceState.getString("wordText"); 
    wordTextView.setText(wordText); 
} 

}

1

La modification de l'orientation tue réellement l'activité et en démarre une nouvelle. Donc dans votre cas onCreate() est appelé à nouveau et le mot aléatoire est généré à nouveau.

Mettez un Log.i("created/destroyed") dans votre onCreate() et onDestroy() pour voir ceci.

+0

Je n'ai pas beaucoup d'expérience avec le développement Android encore, cela? –

+0

Mettez simplement 'Log.i (" MyActivity created ")' dans votre méthode 'onCreate (..)'. Ensuite, jetez un coup d'œil au journal android. –

+0

Je l'ai fait et j'ai reçu une erreur "Le journal ne peut être résolu" –