gpt4 book ai didi

java - 如何避免在android中方向改变时生成随机数

转载 作者:行者123 更新时间:2023-12-01 18:21:35 27 4
gpt4 key购买 nike

我是 Android 新手,正在使用随机数开发示例应用程序。我在 Activity 中生成随机数,该随机数应用于相应布局中的某些 TextView 。每当我将方向从纵向更改为横向或从横向更改为纵向时,每次我旋转屏幕进行同一 Activity 时都会生成随机数值。因此,以前的值会丢失并生成新的数字。我尝试了很多方法,例如 android:configChanges="keyboardHidden|orientation" 以及保存和恢复我的一些值,但这些都没有给我一个正确的解决方案。对此有合适的解决方案吗?提前致谢。

最佳答案

当您更改方向时,您的 Activity 将被完全销毁并重新创建。所以每次它在定向后都会创建新的随机数。有一个重写方法 protected void onSaveInstanceState (Bundle outState),您可以在其中将值存储在 bundle 对象中并在创建时检索它。

喜欢:

@Override
public void onSaveInstanceState(Bundle outState) {
int value = 0; // test value
outState.putInt("key",value);
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
int randomInt = savedInstanceState.getInt("key");
}
// generate random number
}

更新:

private TextView first;
private TextView second;
private EditText editText;
private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initializeViews();
if (savedInstanceState == null) {
first.setText(getRandom());
second.setText(getRandom());
}
else {
first.setText(savedInstanceState.getString("first"));
second.setText(savedInstanceState.getString("second"));
}
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int firstValue = Integer.parseInt(first.getText().toString());
int secondValue = Integer.parseInt(second.getText().toString());
int result = Integer.parseInt(editText.getText().toString());
if( firstValue + secondValue == result )
{
Toast.makeText(MainActivity.this, "Matched", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Wrong, try again", Toast.LENGTH_SHORT).show();
}
}
});
}

@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("first",first.getText().toString());
outState.putString("second",second.getText().toString());
super.onSaveInstanceState(outState);
}

private String getRandom() {
return Integer.toString((int)(Math.random()*10));
}

private void initializeViews() {
first = (TextView)findViewById(R.id.first);
second = (TextView)findViewById(R.id.second);
editText = (EditText)findViewById(R.id.editText);
button = (Button)findViewById(R.id.button);
}

关于java - 如何避免在android中方向改变时生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27597380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com