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

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 に答える
1

これは、Android が向きの変更を処理する方法に関係しています。それは実際にあなたの活動を殺し、それを再開します。それを修正するには2つの方法があります。

1) onSaveInstanceState を実装し、すべての状態をオブジェクト (チェックボックスの値を含む) に書き込み、onRestoreInstanceState を実装してプロセスを逆にします。

2) android:configChanges="orientation" を追加します。これにより、オーバーライド動作が停止します。また、横向きレイアウトと縦向きレイアウトが別々にある場合、レイアウトの自動リロードが中断されます。

オリエンテーション用に個別のレイアウトがない場合は、ルート 2 をお勧めします。もしそうで、あなたのアプリがシンプルなら、ルート 1 をお勧めします。もしあなたがそれを必要としていて、あなたのアプリが複雑なら、あなたはうんざりしていて、苦痛の世界に陥っています。

于 2013-07-23T06:17:13.483 に答える
0

状態が私のクラスで作成されている場合、Android での向きの変更中に状態を保存する方法を参照してください。

メソッドを使用onRetainNonConfigurationInstance()して、向きの変更に関するデータを保存すると彼は言います。

于 2013-09-17T06:29:16.273 に答える