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