3

在我的应用程序中,当在溢出菜单中选中选项时,方向会更改,它们将变为未选中状态。有任何解决这个问题的方法吗?我知道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那么在这种情况下我将如何实现呢?

4

3 回答 3

1

它与 Android 如何处理方向变化有关。它实际上会杀死您的活动并重新启动它。有两种方法可以修复它。

1)实现onSaveInstanceState,将你的所有状态写入一个对象(包括复选框的值)并实现onRestoreInstanceState来反转这个过程。

2)添加 android:configChanges="orientation"。这将停止覆盖行为。如果您有单独的横向和纵向布局,它也会破坏布局的自动重新加载。

如果您没有单独的方向布局,我推荐路线 2。如果您这样做并且您的应用程序很简单,我建议使用路线 1。如果您需要它并且您的应用程序很复杂,那么您将陷入困境并陷入痛苦的世界。

于 2013-07-23T06:17:13.483 回答
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
}

根据您的需要进行适当的更改。

于 2013-07-27T05:54:52.370 回答
0

如果状态由我的类组成,请访问如何在 Android 中的方向更改期间保存状态?

他说要使用onRetainNonConfigurationInstance()方法来保存有关方向更改的数据。

于 2013-09-17T06:29:16.273 回答