Java 如何避免android中方向变化的随机数生成
我是android新手,正在开发一个使用随机数的示例应用程序。我在我的活动中生成随机数,它应用于我相应布局中的一些文本视图。每当我将方向从纵向更改为横向或从横向更改为纵向时,每次为相同的活动旋转屏幕时都会生成随机数值。因此,以前的值丢失,并生成新的数字。我尝试了很多方法,比如Java 如何避免android中方向变化的随机数生成,java,android,Java,Android,我是android新手,正在开发一个使用随机数的示例应用程序。我在我的活动中生成随机数,它应用于我相应布局中的一些文本视图。每当我将方向从纵向更改为横向或从横向更改为纵向时,每次为相同的活动旋转屏幕时都会生成随机数值。因此,以前的值丢失,并生成新的数字。我尝试了很多方法,比如android:configChanges=“keyboardHidden | orientation”和保存并恢复我的一些值,但这些都没有给我一个合适的解决方案。有合适的解决办法吗。? 提前谢谢。试试这样: protect
android:configChanges=“keyboardHidden | orientation”
和保存并恢复我的一些值,但这些都没有给我一个合适的解决方案。有合适的解决办法吗。?
提前谢谢。试试这样:
protected void onSaveInstanceState (Bundle outState) {
outState.putInt("random", randomInt);
super.onSaveInstanceState(outState)
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceSate != null) {
randomInt = savedInstanceState.getInt("random");
}
}
int number;
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("key", number);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
number=savedInstanceState.getInt("key");
}
试着这样做:
int number;
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("key", number);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
number=savedInstanceState.getInt("key");
}
当您更改活动的方向时,它将被完全销毁并重新创建。所以每次它在定向后创建新的随机数。 在saveInstanceState(Bundle outState)上有一个被重写的方法
protected void
,您可以将值存储在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);
}
当您更改活动的方向时,它将被完全销毁并重新创建。所以每次它在定向后创建新的随机数。 在saveInstanceState(Bundle outState)上有一个被重写的方法
protected void
,您可以将值存储在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);
}
你能展示你的代码吗?你能展示你的代码吗。我可以通过保存在bundle对象中并检索它们来获取值。但我需要的是停止屏幕旋转时的数字生成。它只需生成一次。用于纵向或横向。这是基本编程。在这种情况下,您可以设置标志是否已生成。如果未生成,则生成,否则使用现有值。这都是您的编程逻辑。通过设置标志,可以阻止方法重新生成。但我需要停止整个过程或活动的再生。如果你给我任何可视化,那么它将有助于我了解你真正想要做什么。在我的主类中,我有2个随机数生成,设置为2个文本视图,这2个数字的总和由用户在编辑文本字段中输入。对于这个活动,我做了一个单独的纵向布局设计和横向布局设计,相同的布局名称放在不同的布局文件夹名称中(设计有文本监视警报和其他工具)。这是我的活动。我可以通过保存在bundle对象中并检索它们来获取值。但我需要的是停止屏幕旋转时的数字生成。它只需生成一次。用于纵向或横向。这是基本编程。在这种情况下,您可以设置标志是否已生成。如果未生成,则生成,否则使用现有值。这都是您的编程逻辑。通过设置标志,可以阻止方法重新生成。但我需要停止整个过程或活动的再生。如果你给我任何可视化,那么它将有助于我了解你真正想要做什么。在我的主类中,我有2个随机数生成,设置为2个文本视图,这2个数字的总和由用户在编辑文本字段中输入。对于这个活动,我做了一个单独的纵向布局设计和横向布局设计,相同的布局名称放在不同的布局文件夹名称中(设计有文本监视警报和其他工具)。这是我的活动,我已经试过了。这只是为了保存和检索一些值。但我需要整个活动在方向改变时保持不变。我已经尝试过了。这只是为了保存和检索一些值。但我需要整个活动在方向改变时保持不变。