W moich preferencjach.xml mam taki element preferencji:
<Preference android:title="About" />
Chcę przypisać onClick
zdarzenie, więc gdyby użytkownik je kliknął, mógłbym otworzyć nową Intent
lub przeglądarkę. Próbowałem to zrobić tak, jak robię to z przyciskami, ale to nie działa.
java
android
android-preferences
Badr Hari
źródło
źródło
onPostCreate
Aktywność nie zadziała, ponieważ jest za wcześnie (wyjątek zerowy). Każda pomoc jest milefindPreference
jest przestarzałe.PreferenceActivity.findPreference
jest przestarzałe. Jednak dokumentacja mówi, że „[T] jego funkcjonalność powinna być teraz znaleziona w nowej klasie PreferenceFragment. Jeśli używasz PreferenceActivity w starym trybie, dokumentacja tam odnosi się do przestarzałych interfejsów API tutaj” iPreferenceFragment.findPreference
nie jest przestarzała (od API poziom 23, aktualny w momencie pisania). WięcfindPreference
samo w sobie nie jest przestarzałe; jest to bezpośrednie użycie,PreferenceActivity
które jest przestarzałe. Google chce, żebyśmyPreferenceFragment
zamiast tego przenieśli się, a nie porzucilifindPreference
.onPreferenceClick
, zwróć,true
jeśli kliknięcie zostało obsłużone w inny sposóbfalse
.aby uruchomić stronę internetową:
aby rozpocząć określone działanie:
możesz także użyć „android: mimetype”, aby ustawić typ MIME.
źródło
intent-filter
w manifeście dlaSomeActivity
, bo otrzymujęActivityNotFoundException
:(Musisz użyć zdarzenia onPreferenceTreeClick.
Na przykład zobacz http://www.javased.com/index.php?source_dir=platform_packages_apps_phone/src/com/android/phone/MobileNetworkSettings.java
źródło
AKTUALIZACJA 2018+ Dziś
findPreference
metoda jest pozbawiona funkcjonalności. Aby to osiągnąć, po prostu zastąponPreferenceTreeClick
metodę w swoim fragmencie Preference. Na przykład:Ponadto, jeśli chcesz obsłużyć kliknięcie wewnątrz określonego elementu preferencji (np.
ListPreference
), Powinieneś zarejestrowaćsetOnPreferenceChangeListener
wewnątrzonCreate
metodęMySettingsFragment
:źródło
onPreferenceClick
ionPreferenceTreeClick
?Kontynuacja odpowiedzi @jason gilbert
Jestem na targetSdkVersion 25 , a jego odpowiedź nie zadziałała, musiałem owinąć tag intencji tagiem Preference. Przykład:
źródło