在我的应用中,当在溢出菜单中选中选项时,方向会更改,它们将被取消选中。有任何解决这个问题的方法吗?
我知道onSavedInstance
应该可以在这里帮助我,但我不知道如何在我的情况下实现它。
以下是我在主要活动
中处理溢出复选框的示例@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case R.id.subtract_option:
if (item.isChecked()){
item.setChecked(false);
subtractMode = false;
} else{
item.setChecked(true);
subtractMode = true;
}
return true;
default:
return super.onMenuItemSelected(featureId, item);
那么在这种情况下如何实现onSavedInstanceState
?
答案 0 :(得分:1)
它与Android处理方向更改的方式有关。它实际上会杀死您的活动并重新启动它。有两种方法可以解决它。
1)实现onSaveInstanceState,将所有状态写入对象(包括复选框的值)并实现onRestoreInstanceState以反转该过程。
2)添加android:configChanges =“orientation”。这将阻止最重要的行为。如果你有单独的横向和纵向布局,它也会破坏布局的自动重新加载。
如果您没有单独的方向布局,我建议使用路线2。如果您这样做并且您的应用程序很简单,我建议路线1.如果您需要并且您的应用程序很复杂,那么您就会陷入困境并陷入痛苦的世界。
答案 1 :(得分:1)
覆盖onSaveInstanceState方法。
@Override
public void onSaveInstanceState( Bundle outState )
{
super.onSaveInstanceState( outState );
outState.putInt( "position", this.position );
}
和onCreateView
if ( savedInstanceState != null )
{
int temp;
temp = savedInstanceState.getInt( "position", -1 );
Log.i( LOG_TAG, "temp....." + temp );
// do whatever you want
}
根据您的需要进行适当的更改。
答案 2 :(得分:0)
访问How to save state during orientation change in Android if the state is made of my classes?
他说使用onRetainNonConfigurationInstance()
方法保存您的方向更改数据。