Ork*_*zen 5 events android listener android-multiselectlistpreference
我正在使用具有以下属性的MultiSelectListPreference。
<MultiSelectListPreference
android:key="shop_list"
android:entries="@array/shop_titles"
android:entryValues="@array/shop_values"
android:title="@string/pref_title_shops"
android:dialogTitle="@string/pref_title_shops"
android:defaultValue="@array/shop_values"
android:summary="Choose where you hunt"
/>
Run Code Online (Sandbox Code Playgroud)
偏好在静态PreferenceFragment内部,在普通内部Activity。我SharedPreferenceChanged正在为onPause和onResume上的事件注册和取消注册侦听器PreferenceFragment。
代码摘录:
public class AgentSettingsActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
}
public static class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Utils.Log("onCreate");
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.pref_general);
}
@Override
public void onResume()
{
Utils.Log("onResume");
super.onResume();
try
{
Utils.Log("Add pref listeners and try set summary");
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
catch (Exception e)
{
Utils.Log("Pref not found");
}
}
@Override
public void onPause()
{
super.onPause();
Utils.Log("onPause");
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
Utils.Log("onPreferenceChange, key : " + key);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我选中一个选项时,该事件每次都会触发,直到我开始取消选中它们为止。然后侦听器停止被调用。有什么想法我想念的吗?这对我使用Fragment / Activity的方式有影响吗?
注意:我还应该补充一点,我有一个ListPreference,即使MultiSelectListPref停止正确响应后,它仍然可以继续工作。
我正在处理同样的问题。从 SDK 18 开始,一切似乎都工作正常,但在休息时,我遇到了和你一样的问题。
我找到了一个似乎对我有用的解决方案:
MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference("pref_name");
if (multiSelectListPref != null) {
multiSelectListPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
MultiSelectListPreference mpreference = (MultiSelectListPreference) preference;
mpreference.setSummary(newValue.toString());
mpreference.setValues((Set<String>) newValue);
return true;
}
});
}
Run Code Online (Sandbox Code Playgroud)
也许它对你的情况也有用
| 归档时间: |
|
| 查看次数: |
1827 次 |
| 最近记录: |