Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android菜单选项复选框在方向更改修复中未选中_Android_Orientation_Android Checkbox - Fatal编程技术网

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

Android菜单选项复选框在方向更改修复中未选中,android,orientation,android-checkbox,Android,Orientation,Android Checkbox,在我的应用程序中,当在溢出菜单中选中选项时,方向会改变,它们将被取消选中。有办法解决这个问题吗? 我知道,onSavedInstance应该可以在这里帮助我,但我不知道如何在我的情况下实现它 下面是一个如何在主活动中处理溢出复选框的示例 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override

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

那么在这种情况下,我将如何实现savedinstancestate上的
呢?

这与Android如何处理方向变化有关。它实际上会终止并重新启动您的活动。有两种方法可以解决这个问题

1) 实现onSaveInstanceState,将所有状态写入对象(包括复选框的值),并实现onRestoreInstanceState以反转该过程

2) 添加android:configChanges=“方向”。这将停止覆盖行为。如果您有单独的横向和纵向布局,它还将中断布局的自动重新加载


如果你的方向没有单独的布局,我推荐路线2。如果你这么做了,而且你的应用程序很简单,我建议你选择路线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
}
根据您的需要进行适当的更改。

访问


他说使用
onretainonconfigurationinstance()
方法来保存方向更改的数据。

您的应用程序中是否有任何配置更改处理?“溢出”菜单的代码可能也很有用。您应该将复选框状态保存在onSavedInstanceState()中……不,我没有尝试下面的内容。因为我的帖子干涸了,我没有得到具体的答案,所以我用具体的代码发布了这篇文章,并将我过去的一篇文章标记为删除…@Axtn95我合并了这两个问题。但是,你不应该重复你的问题。请参阅以了解当您得不到答案时该怎么办。如果我发布了一些代码,您是否介意再帮我一点忙?我肯定必须实现onSaveInstanceState,但我的大脑无法处理如何在我的情况下实现它!你能再具体一点吗?我是一个noob,所以我需要帮助来实际实现我的代码。我应该在SaveInstanceState中输入什么?您可以保存复选框的最后状态。假设它已检查大于1,如果不大于0。现在在savedInstanceState.getInt(“位置”,-1)中;您将根据重新设置复选框的值来获取值我如何引用复选框状态?我使用onMenuItemSelected中的Item标记选中和取消选中选项,如何在onSaveInstanceState中执行类似操作?请容忍我,哈哈