首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓:使用OnPreferenceChangeListener更新ListPreference

安卓:使用OnPreferenceChangeListener更新ListPreference
EN

Stack Overflow用户
提问于 2013-01-08 18:07:12
回答 1查看 3.7K关注 0票数 2

这是我的preferences.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

代码语言:javascript
复制
<ListPreference
    android:key="KEY_1"
    android:title="Title"
    android:summary="Summary"
    android:dialogTitle="Dialog"
    />
<ListPreference
    android:key="KEY_2"
     />   
<ListPreference
    android:key="KEY_3"
     />   
<ListPreference
    android:key="KEY_4"
     />

下面是Settings.java:

代码语言:javascript
复制
public class Settings extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);

// some methods to generate entries and values for ListPreference
final List List_1 = // something
final List List_2 = // something
final List List_3 = // something

String[] entry_1 = List_1.toArray(new String[List_1.size()]);
String[] entry_2 = List_2.toArray(new String[List_2.size()]);
String[] entry_3 = List_3.toArray(new String[List_3.size()]);

String[] value_1 = List_1.toArray(new String[List_1.size()]);
String[] value_2 = List_2.toArray(new String[List_2.size()]);
String[] value_3 = List_3.toArray(new String[List_3.size()]);


    // set arrays for entries and values    
 final ListPreference lp1 = (ListPreference)findPreference("KEY_1");
 lp1.setEntries(entry_1);
 lp1.setEntryValues(value_2); 

ListPreference lp2 = (ListPreference)findPreference("KEY_2");
lp2.setEntries(entry_2);
lp2.setEntryValues(value_1);

ListPreference lp3 = (ListPreference)findPreference("KEY_3");
lp3.setEntries(entry_2);
lp3.setEntryValues(value_2);

ListPreference lp4 = (ListPreference)findPreference("KEY_4");
lp4.setEntries(entry_2);
lp4.setEntryValues(value_3);

// update lp2, lp3, lp4

        lp1.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                String listValue = (String) newValue;

                ListPreference lp2 = (ListPreference)findPreference("KEY_2");
                lp2.setDefaultValue(listValue);

                ListPreference lp3 = (ListPreference)findPreference("KEY_3");
                lp3.setDefaultValue(listValue);

                ListPreference lp4 = (ListPreference)findPreference("KEY_4");
                lp4.setDefaultValue(listValue);

                return true;
            }
        });
    }
}

这对我来说只有一次好用。为了稍后在lp2、lp3和lp4上进行更新,我在这里遗漏了什么?我猜setDefaultValue只是创建了共享首选项的一次性输入?

EN

回答 1

Stack Overflow用户

发布于 2013-04-21 06:07:42

我怀疑您的匿名侦听器是垃圾收集的-添加一些调试打印以查看是否调用了侦听器

代码语言:javascript
复制
lp1.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        Log.d("Listener", "I listen");
        String listValue = (String) newValue;
        // rest is the same
    }
});

如果没有看到调试打印,请将侦听器移到class字段,然后:

代码语言:javascript
复制
public class Settings extends PreferenceActivity {

    private OnPreferenceChangeListener mListener=new OnPreferenceChangeListener(){
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue){
            // as before
        }
    };
    // etc - I guess the line below is in onCreate() - correct your formatting !
    lp1.setOnPreferenceChangeListener(mListener);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14212532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档