2011-05-02 3 views
6

PreferenceScreen에는 CheckBoxPreferences (카테고리 선택)이 포함되어 있습니다. 나는 그들 모두를 체크/체크 해제하는 옵션이 필요하다. 그 일을하는 다음 코드가 있지만 한가지 문제가 있습니다 : 화면의 체크 박스가 업데이트되지 않았습니다 - 뷰 또는 무언가에 대해 무효화를 호출해야합니다.Android CheckBoxPreference - 모든 환경 설정을 해제/확인하십시오.

여기에 내 현재 코드 :

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(); 
    } 

이 코드는 잘 작동하지만 난 (그냥 닫고 다시 시작하는 설정 작업을 한 후) imediatelly 결과를보고 어떻게 든보기를 새로 고쳐야 할 것입니다.

모든 조언을 주심.

답변

14

사용자가 실제로 기본 설정 개체를 잡아 내지 않았기 때문에 그게 사실입니다. 루프 당신이 시도 :

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

내가 당신을 위해 그렇게 할 것)을 setChecked (로, 에디터를 호출하고 커밋 생략 할 수 있다고 생각합니다.

this도 확인하십시오.

+0

은, 대단히 감사는 그 화려한이었다! – shadyyx

+0

그냥 정보 : HoneyComb에서 사용되지 않지만이 코드는 ICS까지 작동하지만 Jelly Bean에서는 작동하지 않습니다. – AliR

+0

Jelly Bean과 호환되지 않는 부분은 무엇입니까? 나는'findPreference'와'setChecked'를 검사했고 4.1.1에서 deprecation으로 표시되지 않았습니다. – dmon

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); 
      } 
     } 

    } 
}