Android'de çalışan bir geçiş tercihi almaya çalışıyorum, böylece tüm tercihleri tıkladıklarında veya açıp kapatacakları durumlarda, farklı durumlarda araya girme ve işleme kabiliyetine sahip olabilirim. . Anahtar Tercihi - Üzerinde hemHariciHaritayuDeğiştir hem dePreferansAyrıştırma
Bu
Ben başarmak çalışıyorum budur: Kullanıcı etiketleri kapalı tercihleri gider ve hiçbir etiketleri saklanır (yani: tag tercihi boştur) Kullanıcı etiketleri için tercihi açar, ve o zamandan beri hiçbir etiketler şu anda saklanır Kullanıcının etiketi bulması için bir etiket arama etkinliği başlatır. - iyi çalışıyor.Etiket zaten varsa ve SADECE durumu değiştirirse, değeri normal olarak güncelleyin. - iyi çalışıyor
İşte benim sorunum: Tercihleri tıklarlarsa ve zaten bir etiketi kaydedildiyse, durumu değiştirmeyin (etkin olup olmadığına bakılmaksızın veya devre dışı bırakılmışsa), etiket arama etkinliğini başlatın. - Bu işe yaramaz.
Şimdiye kadar bulduklarım, yukarıdaki son senaryoda, onPreferenceChanged öğesine bir çağrı alıp onPreferenceClicked öğesine yapılan bir çağrıyı ve ardından onPreferenceChanged öğesine yapılan bir sonraki çağrıyı almamdır. Bu benim sorunum gibi görünüyor. OnPreferenceChanged öğesine yapılan ilk çağrı, dinleyicimin SharedPreferences'ım üzerinde etkin olup olmadığını bildirmesini sağlar.
Eğer onPreferenceChanged için ilk çağrıyı almadıysam sorun olmazdı. Ben dinleyicileri
SwitchPreference tagPref = (SwitchPreference) findPreference(PreferencesConstants.PREFERENCE_TAG_ENABLED);
tagPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.e("BLAH", "onPrefChanged....is it handled by OnClick?" + Boolean.toString(handledByClick));
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
boolean enabled = prefs.getBoolean(PreferencesConstants.PREFERENCE_TAG_ENABLED, false);
Log.e("BLAH", "value stored in prefs? " + Boolean.toString(enabled));
if (newValue instanceof Boolean) {
enabled = (Boolean) newValue;
}
Log.e("BLAH", "New value? " + Boolean.toString(enabled));
if (!handledByClick) {
if (enabled && (currentTag == null || currentTag.isEmpty())) {
Log.e("BLAH", "Enabled and CurrentTag empty!");
Intent intent = new Intent(getActivity(), TagSearchActivity.class);
startActivityForResult(intent, 0);
return false; // always return false, we'll handle
// updating
// this value manually.
} else {
return true;
}
}
Log.e("BLAH", "returning false (AS IN WE HANDLED IT).");
return false;
}
});
tagPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
handledByClick = true;
Log.e("BLAH", "onprefClick");
Intent intent = new Intent(getActivity(), TagSearchActivity.class);
startActivityForResult(intent, 0);
return true;
}
});
İşte kaydedilmiş bir etiketi ile çalıştırdıktan sonra, ilgili günlük çizgilerdir ayarlayarak ve tercih tıklayarak ediyorum nerede
İşte alakalı parçadır.
01-18 15:55:05.593: E/BLAH(13261): onPrefChanged....is it handled by OnClick?false
01-18 15:55:05.593: E/BLAH(13261): value stored in prefs? true
01-18 15:55:05.593: E/BLAH(13261): New value? false
01-18 15:55:05.613: E/DifferentClass(13261): On Shared Preferences Changed - tagEnabled
01-18 15:55:05.652: E/DifferentClass(13261): disabled TAG in cancelAlarmService
01-18 15:55:05.662: E/AnotherClass(13261): Updating Feed List. Old Size: 33, New Size: 14
01-18 15:55:05.682: E/BLAH(13261): onprefClick
01-18 15:55:05.812: E/BLAH(13261): onPrefChanged....is it handled by OnClick?true
01-18 15:55:05.812: E/BLAH(13261): value stored in prefs? false
01-18 15:55:05.822: E/BLAH(13261): New value? false
01-18 15:55:05.822: E/BLAH(13261): returning false (AS IN WE HANDLED IT).
çok güzel yazı. Gösterdiğin için teşekkürler. Yine de istediğim gibi tercihleri yine de özelleştirebilirsiniz. Son kontrol ettiğimde, özel tercihlerin bir android kütüphanesinde var olmaları durumunda bazı sorunları olduğunu unutmayın. ne ve neden olduğundan emin değilim. belki de en son ADT ve SDK’ya zaten sabittirler. –
Ayrıca, fark ettim ki, yukarıda belirttiğim 2 bağlantıdan bir kısmını birleştirmeniz gereken anahtar tercihinin "doğru" görünümünü ve hissini elde etmek için. İlk bağlantı benim uygulamış olduğum şey olsa da, düzen dosyasının sadece bir başlık ve özet içermemesinden sonra fark ettim. Hem başlığa hem de özete ihtiyacım var. Gönderdiğim ikinci bağlantı, tam olarak bunu yapan çok güzel bir düzen dosyasına sahip. Hala birisinin bu bilgiye ihtiyacı olması durumunda, ayarlarımdaki diğer tercihlerle aynı şekilde görünmesini sağlamak için bir çift dolgu ve metin boyutunu değiştirmek zorunda kaldım. – forevercrashed