Недавно я импортировал библиотеку HoloEverywhere
из GitHub в Eclpse и начал использовать ее в приложении, которое уже работает. В целом я доволен библиотекой, и все идет хорошо.onSharedPreferenceChanged() Никогда не вызывал
Я стараюсь использовать org.holoeverywhere.preference.PreferenceActivity
вместо моих старых PreferenceActivity
. Пользовательский интерфейс выглядит так, как должно, но Я заметил, что onSharedPreferenceChanged() больше не вызывает вызов. Что я делаю не так?
AFAIK Я пользуюсь библиотекой по своему усмотрению. Я почти ничего не изменил с моей старой версии до новой версии, используя HoloEverywhere
. В то время как существует много вопросов на SO, я не мог найти ничего, что касается моей проблемы.
Соответствующий код размещен ниже:
import org.holoeverywhere.LayoutInflater;
import org.holoeverywhere.preference.Preference;
import org.holoeverywhere.preference.PreferenceFragment;
import org.holoeverywhere.preference.PreferenceManager;
import org.holoeverywhere.preference.PreferenceScreen;
import org.holoeverywhere.preference.SharedPreferences;
import org.holoeverywhere.preference.SharedPreferences.Editor;
import org.holoeverywhere.preference.SharedPreferences.OnSharedPreferenceChangeListener;
public class SettingsActivity extends org.holoeverywhere.preference.PreferenceActivity implements SyncManager.SyncProgressListener, SharedPreferences.OnSharedPreferenceChangeListener
{
private static SharedPreferences prefs;
@Override
public void onCreate(Bundle savedInstanceState)
{
prefs = PreferenceManager.getDefaultSharedPreferences(this);
}
public void onSharedPreferenceChanged(SharedPreferences prefs, String key)
{
// do some really important stuff here
}
public static class DisplaySetttingsFragment extends PreferenceFragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getActivity().setTitle(getString(R.string.pref_display_title));
addPreferencesFromResource(R.xml.display_preferences);
}
@Override
public void onResume()
{
super.onResume();
prefs.registerOnSharedPreferenceChangeListener((SettingsActivity) getActivity());
}
@Override
public void onPause()
{
super.onPause();
prefs.unregisterOnSharedPreferenceChangeListener((SettingsActivity) getActivity());
}
}
}
Update: пример, где я менять и совершать предпочтения, и я бы ожидать onSharedPreferenceChanged(), чтобы называться
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)
{
String resetString = getString(R.string.pref_key_reset_display);
String key = preference.getKey();
if (key != null && key.equals(resetString))
{
prefs.edit().
putBoolean(getString(R.string.pref_key_reset_display), true).commit();
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
Обновление: I d o Не верю, что это проблема моих предпочтений, не имеющих зарегистрированного слушателя (в данном случае мой SettingsActivity
) во время commit()
или apply()
. Я могу отлаживать и видеть, что WeakHashMap
внутри prefs
для слушателей всегда имеет свою деятельность в качестве участника. Я попытался создать глобальную переменную, которая является слушателем, но это не имеет никакого значения.
Можете ли вы опубликовать метод, в котором вы что-то меняете в префиксах? – Opiatefuchs
@Opiatefuchs Добавлен пример в соответствии с запросом. – Jon