Android 解锁时屏幕自动旋转

Android 解锁时屏幕自动旋转,android,Android,您好,我正在尝试在“活动”中保存一些值,但当我使用onSaveInstanceState保存它并使用onRestoreInstanceState还原时,我遇到了一个问题,我正在保存一个整数年,它会保存屏幕第一次更改方向时,微调器会重新填充并将其设置为最后一个值,但当我再次切换回方向时就不会了 在我的清单中,我的方向设置为横向,我覆盖了两个save和restore方法,但它似乎不起作用,我还需要在onPause中做些什么吗 这是我的密码: int years;//global variab

您好,我正在尝试在“活动”中保存一些值,但当我使用onSaveInstanceState保存它并使用onRestoreInstanceState还原时,我遇到了一个问题,我正在保存一个整数年,它会保存屏幕第一次更改方向时,微调器会重新填充并将其设置为最后一个值,但当我再次切换回方向时就不会了

在我的清单中,我的方向设置为横向,我覆盖了两个save和restore方法,但它似乎不起作用,我还需要在onPause中做些什么吗

这是我的密码:

    int years;//global variable
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Spinner spinnerYears = (Spinner) findViewById(R.id.spinYears);//Spinner
            final ArrayAdapter <Integer> adapter = new ArrayAdapter <Integer>(this,android.R.layout.simple_spinner_item );
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        for(int i=0;i<=100;i++)
        {
           adapter.add(i);
        }
        spinnerYears.setAdapter(adapter);
        years = spinnerYears.getSelectedItemPosition();

   }//onCreate

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);

  savedInstanceState.putInt("MyInt", years);


}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  Spinner spinnerYears = (Spinner) findViewById(R.id.spinYears);//Spinner
    final ArrayAdapter <Integer> adapter = new ArrayAdapter <Integer> (this,      android.R.layout.simple_spinner_item );
           adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        for(int i=0;i<=100;i++)
     {
        adapter.add(i);
     }

      spinnerYears.setAdapter(adapter);
      TextView tvYears = (TextView) findViewById(R.id.tvYears);//spinner Tv
  tvYears.setVisibility(TextView.GONE);


 int myInt = savedInstanceState.getInt("MyInt");
  spinnerYears.setSelection(myInt);//
  Toast.makeText(getBaseContext(), "Restored int"+myInt, Toast.LENGTH_LONG).show();
}
int年//全局变量
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinnerYears=(Spinner)findViewById(R.id.spinYears);//Spinner
最终ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器项目);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);

对于
onrestoreinnstancestate()
中的(int i=0;i),您从不将值赋回变量
years
。您将其赋给int,然后忽略它。因此,当调用
onSaveInstanceState()
时,
years
尚未设置,它会保存未设置的值(0)

如果将底部的
getInt()
行更改为:

years = savedInstanceState.getInt("MyInt");
spinnerYears.setSelection(years);

它应该开始工作了。祝你好运!

onrestoreinnstancestate()
中,你永远不会将值赋回变量
years
。你将它赋给一个int,然后忽略它。因此,当调用
onSaveInstanceState()
时,
years
尚未设置,它会保存未设置的值(0)

如果将底部的
getInt()
行更改为:

years = savedInstanceState.getInt("MyInt");
spinnerYears.setSelection(years);

它应该开始工作了。祝你好运!

因为你没有处理改变方向的事件,所以每次你改变方向时,你的程序(或
活动
)都会被重新创建,这意味着
onCreate()
方法总是被调用;这会导致
onSaveInstanceState()的结果
onRestoreInstanceState()
从未被调用

Android文档对此进行了解释:

为了解决此问题,请在
AndroidManifest.xml
中添加此属性:

android:configChanges="orientation"

为了避免
活动
重新启动,祝你好运!

因为你没有处理改变方向的事件,所以每次你改变方向时,你的程序(或
活动
)都会被重新创建,这意味着
onCreate()
方法始终被调用;这会导致永远不会调用
onSaveInstanceState()
onRestoreInstanceState()
的结果

Android文档对此进行了解释:

为了解决此问题,请在
AndroidManifest.xml
中添加此属性:

android:configChanges="orientation"
为了避免
活动
重启,祝你好运