Произвольно генерируемые слова меняются при переключении между портретом и ландшафтом - PullRequest
0 голосов
/ 06 ноября 2010

У меня есть массив в res/values/array.xml.

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

А это мой Java-код без операторов 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);

    }
}

Отображает случайный элемент из array.xml в TextView с идентификатором слова. Все отлично работает До тех пор, пока я не переключусь с портретного на ландшафтный режим или наоборот, он покажет другой случайный элемент. Когда я переключаюсь назад и вперед, мне бы хотелось, чтобы тот же элемент отображался изначально. Как бы я это сделал?

Ответы [ 2 ]

1 голос
/ 06 ноября 2010

Изменение ориентации фактически убивает активность и начинает новую.Таким образом, в вашем случае onCreate() вызывается снова, и случайное слово генерируется снова.

Поместите немного Log.i("created/destroyed") в ваши onCreate() и onDestroy(), чтобы увидеть это.

0 голосов
/ 07 ноября 2010

Наконец-то разобрался. Мне нужно было onSaveInstanceState () найти строку и сохранить ее, а затем onRestoreInstanceState (), чтобы отобразить ее в нужном месте после перезапуска действия. Вот код и искренне благодарю за помощь.

Публичный класс Обучение расширяет Деятельность {

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);
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...