在纵向和横向之间翻转时,随机生成的单词会发生变化

时间:2010-11-06 07:34:10

标签: java arrays resources random orientation

我在res/values/array.xml中有一个数组。

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

这是我的Java代码,没有import-statements。

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中的随机项显示为带有id的textView。一切都很好。直到我从纵向切换到横向,反之亦然,然后它显示另一个随机项目。当我来回切换时,我希望它保持最初显示的相同项目。我该怎么做?

2 个答案:

答案 0 :(得分:1)

更改方向实际上会杀死活动并开始一个新活动。因此,在您的情况下,再次调用onCreate()并再次生成随机字。

Log.i("created/destroyed")onCreate()中加入一些onDestroy()来查看此内容。

答案 1 :(得分:0)

终于明白了。我需要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);
}

}