0

プリファレンスアクティビティがあり、リストプリファレンスが変更されたときにデフォルト値を設定しないことに気づきました。
プリファレンスには、これらの基本的なダイナミクスがあります

  • チェックボックス=チェックされていない場合->プリファレンスエントリ値のリスト=x
  • チェックボックス=チェックマークが付いている場合->プリファレンスエントリ値のリスト=z

アプリを最初に実行するとデフォルト値が設定されますが、チェックボックスをオンにすると、その後は値が適用されません。

コード:

public class QuickPrefsActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.preferences);

        View title =(View)getWindow().findViewById(android.R.id.title);
        FrameLayout titlebar=(FrameLayout)title.getParent();

        TextView txt = (TextView)titlebar.getChildAt(0);
        txt.setGravity(Gravity.CENTER);

        CheckBoxPreference chckbox = (CheckBoxPreference)
                                 findPreference("french");
        if (chckbox.isChecked()) {
                ListPreference newsPref = (ListPreference)
                                 findPreference("news_feed");
                newsPref.setEntryValues(getResources().
                                  getStringArray(R.array.newsfeedfr));
                newsPref.setDefaultValue(1);
        } else {
                ListPreference news2Pref = (ListPreference)
                                  findPreference("news_feed");
                news2Pref.setEntryValues(getResources().
                                  getStringArray(R.array.newsfeed));
                news2Pref.setDefaultValue(1);
        }
    }
}
4

2 に答える 2

1

以下のようにonPreferenceChangeListenerを追加する必要があります...

final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager().findPreference("french");

checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if(newValue.toString().equals("true") {
          // add your code here if checkbox is checked.
        }
        else {
          // add your code here if checkbox is not checked.
        }      
        return true;
    }
}); 
于 2012-09-13T07:31:41.103 に答える
1

メソッドsetDefaultValue()は、値配列のインデックスではなく、オブジェクトを引数として取ります。したがって、コードを次のように書き直す必要があります。

String[] values = getResources().getStringArray(R.array.newsfeed)
news2Pref.setEntryValues(values);
news2Pref.setDefaultValue(values[0]);

さらに、おそらくエントリのタイトルも設定する必要があります。

news2Pref.setEntries(your_titles_array_here);
于 2012-09-13T07:29:59.387 に答える