方向更改修复程序未选中Android菜单选项复选框

时间:2013-07-27 05:40:29

标签: android orientation android-checkbox

在我的应用中,当在溢出菜单中选中选项时,方向会更改,它们将被取消选中。有任何解决这个问题的方法吗? 我知道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

3 个答案:

答案 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()方法保存您的方向更改数据。