2010-11-29 3 views
1

私はradiobuttongroupのようなやり取りをしたいという意味の私のpreferencescreenに4つのcheckboxpreferencesを持っています。最初のものがチェックされていて、他のものをチェックしたいのであれば、それだけがチェックされ、他のものはチェックされていません。Android:CheckboxPreferencesはRadioButtonsのように動作します

答えて

0

http://developer.android.com/reference/android/preference/CheckBoxPreference.html#setDisableDependentsState%28boolean%29を使用してその機能を作成できるようです。私は好みの依存関係をxmlで設定できると思います。

+1

このメソッドのドキュメントを読む方法は、現在のチェックボックスをオンにしたときに他のチェックボックスのグループを無効にすることです。質問者は、ラジオボタンの動作をチェックボックスで探しています。何か不足していますか? –

+0

ああ、私はそれを以前に使ったことはないと思う。 – Falmarri

3

私はこのようでした:あなたはあなたのprefs.xmlの "keyItemChecked" を宣言する必要はありません

public class PreferenceActivity extends PreferenceActivity { 

    private SharedPreferences prefs; 
    private Editor    editor; 
    private int    keyItemChecked; 
    private CheckBoxPreference item1CheckBox, item2CheckBox, ..., itemICheckBox; 

    @SuppressWarnings("deprecation") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     prefs = PreferenceManager.getDefaultSharedPreferences(this); 

     addPreferencesFromResource(R.xml.prefs); 

     item1CheckBox = (CheckBoxPreference) getPreferenceManager().findPreference("item1"); 
     item2CheckBox = (CheckBoxPreference) getPreferenceManager().findPreference("item2"); 
     ...  
     itemICheckBox = (CheckBoxPreference) getPreferenceManager().findPreference("itemI"); 

     item1CheckBox.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
      @Override 
      public boolean onPreferenceClick(Preference arg0) { 
       manageItem(1, item1CheckBox); 
       return true; 
      } 
     }); 
     .... 
     itemICheckBox.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
      @Override 
      public boolean onPreferenceClick(Preference arg0) { 
       manageItem(I, itemICheckBox); 
       return true; 
      } 
     }); 

    } 
    private void manageItem(int i ,CheckBoxPreference pref) { 
     keyItemChecked = prefs.getInt("keyItemChecked",1); // 1 is your default checked item 
     if (! pref.isChecked() && keyItemChecked == i) 
     // If you click on the checked item, you don't want it to be unchecked : 
      pref.setChecked(true); 
     if (pref.isChecked() && keyItemChecked != i) { 
      editor = prefs.edit(); 
      editor.putInt("keyItemChecked", i); 
      editor.commit(); // or editor.apply() if you use API > 9 
      unckeckOldItem(keyItemChecked); 
     } 
    } 
    private void unckeckOldItem(int item) { 
     switch (item) { 
     case 1: 
      item1CheckBox.setChecked(false); 
      break; 
     ... 
     case I: 
      itemICheckBox.setChecked(false); 
      break; 
    } 
} 

。あなたが活動を呼び出し、データが存在しないと

keyItemChecked = prefs.getInt("keyItemChecked",1); 

初めてデフォルト以外の項目をクリックすると、データが存在します。1. を返します。

関連する問題