6

私はPreferenceScreen含むだけCheckBoxPreferences(選択するカテゴリ)を持っています。それらすべてをチェック/チェック解除するオプションが必要です。私は仕事をする次のコードを持っていますが、1 つの問題があります: 画面上のチェックボックスが更新されない - ビューなどで無効化を呼び出す必要があります。

これが私の現在のコードです:

    private void checkAll() {
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = settings.edit();
        @SuppressWarnings("unchecked")
        Map<String, Boolean> categories = (Map<String, Boolean>) settings.getAll();
        for(String s : categories.keySet()) {
            editor.putBoolean(s, true);
        }
        editor.commit();
    }

    private void uncheckAll() {
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = settings.edit();
        @SuppressWarnings("unchecked")
        Map<String, Boolean> categories = (Map<String, Boolean>) settings.getAll();
        for(String s : categories.keySet()) {
            editor.putBoolean(s, false);
        }
        editor.commit();
        this.restart();
    }

このコードは正常に動作しますが、結果をすぐに表示するには、何らかの方法でビューを更新する必要があります (設定アクティビティを閉じて再起動した後ではありません)。

アドバイスをありがとうございました!

4

2 に答える 2

14

これは、実際には設定オブジェクトを取得しているのではなく、実際の値だけを取得しているためです。forループでこれを試してください:

 boolean theValue = param;
 for(String s : categories.keySet()) {
    Preference pref = findPreference(s);
    if (pref instanceof CheckBoxPreference) {
      CheckBoxPreference check = (CheckBoxPreference)pref;
      check.setChecked(theValue);
    }
  }

setChecked() がそれを行うので、エディターの呼び出しとコミットを省略できると思います。

これもチェックしてください。

于 2011-05-03T02:38:43.427 に答える
0

今、私はこの動作するコードを持っています、多分それは誰かを助けるでしょう:

import ...

public class CategoriesActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.category_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.categories_check_all:
                this.checkAll();
                return true;
            case R.id.categories_uncheck_all:
                this.uncheckAll();
                return true;
        }
        return false;
    }

    private void checkAll() {
        this.setCheckState(true);
    }

    private void uncheckAll() {
        this.setCheckState(false);
    }

    private void setCheckState(Boolean state) {
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
        @SuppressWarnings("unchecked")
        Map<String, Boolean> categories = (Map<String, Boolean>) settings.getAll();
        for (String s : categories.keySet()) {
            Preference pref = findPreference(s);
            if (pref instanceof CheckBoxPreference) {
                CheckBoxPreference check = (CheckBoxPreference) pref;
                check.setChecked(state);
            }
        }

    }
}
于 2011-05-03T14:37:22.293 に答える