ANDROID首选项活动未设置默认值

时间:2012-09-13 07:05:45

标签: android android-preferences

我有偏好活动,并注意到列表首选项在更改时未设置默认值 偏好具有这些基本动态

  • 如果Checkbox =未选中 - >列表首选项条目值= x
  • 如果Checkbox =勾选 - >列表首选项条目值= z

当应用程序首次运行时,设置了默认值,但是当我勾选复选框时,之后不会应用任何值。

CODE:

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

2 个答案:

答案 0 :(得分:1)

方法setDefaultValue()将Object作为参数,而不是value数组中的索引。所以,你应该重写你的代码:

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

此外,您也应该设置条目标题:

news2Pref.setEntries(your_titles_array_here);

答案 1 :(得分: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;
    }
});