0

メニューにチェックボックスのあるSherlockActionBarのMenuItemがありますが、デバイスを回転させてもチェックボックスはアクティブですが、ラベルの右側のアイコンがオフになっています。

私が達成したいのは、デバイスを回転させた後、そのボックスが再びチェックされていることを示すことです。

これまで、SharedPreferences、フラグを使用して修正し、「Menu」(onCreateOptionsMenuから)を変数に格納し、ID onPrepareOptionsMenuを探してきましたが、何も実行していません。

私が今しているのは、MenuItemのステータスフラグを「onOptionsItemSelected」に保存し、「onPrepareOptionsMenu」でフラグの値をチェックしてチェックを設定することです...しかし、それはさらに問題を引き起こしています。

私には何をすべきかについての手がかりがありません。:(

コード:

private boolean lockFlag;

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    this.menu = menu;

    getSupportMenuInflater().inflate(R.menu.activity_main, menu);

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_lock:
        if (item.isChecked()) {
            item.setChecked(false);
            lockFlag = false;
        } else {
            item.setChecked(true);
            lockFlag = true;
        }
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    if (lockFlag) {
        menu.findItem(R.id.menu_lock).setChecked(true);
    } else {
        menu.findItem(R.id.menu_lock).setChecked(false);
    }

    return true;
}

private void savePrefs() {
    getSharedPreferences("LOCKBARS", MODE_PRIVATE).edit().putBoolean("lockbars", lockFlag).commit();
}

private void loadPrefs() {
    this.lockFlag = getSharedPreferences("LOCKBARS", MODE_PRIVATE).getBoolean("lockbars", false);
}

編集:これらは私が使用している種類のチェックボックスであり、手動でアイコンを設定していません。

ここに画像の説明を入力してください ここに画像の説明を入力してください

EDIT2:

OK、それでandroid:configChanges="orientation|screenSize"うまくいくように見えますが、横向きモードのレイアウトの使用を停止し、代わりにデフォルトのレイアウトを使用します。そしてandroid:configChanges="orientation"「screenSize」なしでは何もしません。

Edit3:

恥知らずなオートバンプ。私はまだ立ち往生しています。:(

4

2 に答える 2

0

一般的な向きの変更のように見えました-状態保存の問題です。この問題には、次のリンクで提供されているような優れた解決策が既にあります。

Androidで向き変更時の状態を保存する方法

Android でのアクティビティ状態の保存

于 2013-02-13T23:36:13.753 に答える
0

私が経験したことから、マニフェスト ファイルに次のものを含めると、状態が保持されます。

" android:configChanges="orientation|screenSize"/>

後で編集を見ました。これはあなたが間違っていることかもしれません:

MenuItem のチェック状態がアイコンで正しく表示されない

于 2013-02-13T23:45:01.433 に答える