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