Java 如何避免android中方向变化的随机数生成

Java 如何避免android中方向变化的随机数生成,java,android,Java,Android,我是android新手,正在开发一个使用随机数的示例应用程序。我在我的活动中生成随机数,它应用于我相应布局中的一些文本视图。每当我将方向从纵向更改为横向或从横向更改为纵向时,每次为相同的活动旋转屏幕时都会生成随机数值。因此,以前的值丢失,并生成新的数字。我尝试了很多方法,比如android:configChanges=“keyboardHidden | orientation”和保存并恢复我的一些值,但这些都没有给我一个合适的解决方案。有合适的解决办法吗。? 提前谢谢。试试这样: protect

我是android新手,正在开发一个使用随机数的示例应用程序。我在我的活动中生成随机数,它应用于我相应布局中的一些文本视图。每当我将方向从纵向更改为横向或从横向更改为纵向时,每次为相同的活动旋转屏幕时都会生成随机数值。因此,以前的值丢失,并生成新的数字。我尝试了很多方法,比如
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个数字的总和由用户在编辑文本字段中输入。对于这个活动,我做了一个单独的纵向布局设计和横向布局设计,相同的布局名称放在不同的布局文件夹名称中(设计有文本监视警报和其他工具)。这是我的活动,我已经试过了。这只是为了保存和检索一些值。但我需要整个活动在方向改变时保持不变。我已经尝试过了。这只是为了保存和检索一些值。但我需要整个活动在方向改变时保持不变。