我正在使用具有以下属性的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"
/>
偏好在一个静态的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);
}
}
}
当我检查一个选项时,事件每次都会触发,直到我开始取消选中它们。然后监听器停止被调用。有什么想法我在这里想念的吗?这对我使用 Fragment / Activity 的方式有影响吗?
注意:我还应该补充一点,我有一个 ListPreference,即使在 MultiSelectListPref 停止正确响应后它仍然可以工作。