2013-06-12 24 views
6

Utworzono podklasę PreferenceFragment, która implementuje CompoundButton.OnCheckedChangeListener. Mam jedną preferencję, która zawiera Switch (podklasa CompoundButton). Oto zwrotna stworzyłem, gdy wartość przełączeń:Program nasłuchujący przycisk nie działa w obszarze Fragment preferencji

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    mAppController.doSomething(isChecked); 
    Log.v("rose_tag", "hi"); 
} 

Oświadczam preferencję w OnCreate następująco:

Switch mySwitch = (Switch) myView.findViewById(R.id.switch); 
mySwitch.setEnabled(true); 
mySwitch.setOnCheckedChangeListener(this); 

Funkcja zwrotna jest wywoływana, gdy widok najpierw otwiera (a Punkt przerwania w wywołaniu zwrotnym jest trafiony), ale nie jest drukowany żaden dziennik, a wywołanie zwrotne nie jest wywoływane ponownie, nawet po włączeniu i wyłączeniu przełącznika. Jak mogę wykonać to wywołanie zwrotne?

Próbowałem również stworzyć wbudowany anonimowy słuchacz. Próbowałem również używać prostego Button z odbiornikiem onClick, ale to też nie działa.

+0

masz sprawdzeniu importu? Czasami zdarza się, że istnieje niewłaściwa deklaracja importowa. Czy Twój plik onCheckedChangeListener jest importowany w następujący sposób: android.widget.CompoundButton.OnCheckedChangeListener? – Opiatefuchs

+0

Mam 'import android.widget.CompoundButton' –

+0

może być alternatywą dla: mySwitch.setOnCheckedChangeListener (new OnCheckedChangeListener() {}); zamiast ustawienia zaimplementowanego chekedChangeListener. Czy mógłbyś spróbować? – Opiatefuchs

Odpowiedz

8

Widzę, że próbujesz użyć PreferenceFragment jak każdego innego normalnego fragmentu. Musisz jednak wziąć pod uwagę poprawny mechanizm, jednym z przykładów jest to, że nie możesz używać wszystkich widżetów do tworzenia widoku preferencji dla użytkownika, musisz użyć obiektów Preference (zobacz Podklasy preferencji).

Innym przykładem jest użycie addPreferencesFromResource(int) do nadmuchania preferencji z zasobu XML.

Sprawdź oba powyższe linki i tę example.

Mam nadzieję, że to ci pomoże.

2

Jeśli korzystasz z anwser z Jorge Gil, nie będziesz mógł łatwo uzyskać odniesienia do widoku, który deklarujesz w PreferenceScreen. Jednak można łatwo uzyskać jeden z obiektów preferencji, który w tym przypadku jest SwitchPreference. Więc w swoim res/xml/preferences.xml dodać swoje preferencje Switch:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="screen"> 

    <SwitchPreference 
      android:key="switch_preference" 
      android:title="title" 
      android:summary="summary" /> 

</PreferenceScreen> 

Następnie w funkcji onCreate PreferenceFragment/PreferenceActivity dodają to:

addPreferencesFromResource(R.xml.preferences);  
    SwitchPreference switchPref = (SwitchPreference) findPreference("switch_preference"); 

    switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      Log.e(getClass().getSimpleName(),"onPreferenceChange:" + newValue); 
      return true; 
     } 
    }); 
Powiązane problemy