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

方法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 回答
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 回答