2013-06-12 9 views
6

Ho creato una sottoclasse di PreferenceFragment che implementa CompoundButton.OnCheckedChangeListener. Ho una preferenza che contiene un Switch (una sottoclasse di CompoundButton). Ecco il callback ho creato per quando il valore del commutatore:Listener di pulsanti che non funziona nel frammento di preferenze

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

Dichiaro la preferenza in OnCreate come segue:

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

La funzione di callback viene chiamata quando la vista si apre prima (un viene raggiunto il punto di interruzione nella richiamata), ma non viene stampato alcun registro e la richiamata non viene mai richiamata, anche quando si accende e spegne l'interruttore. Come posso far funzionare questa callback?

Ho anche provato a creare un listener anonimo in linea. Ho anche provato a utilizzare un semplice Button con un listener onClick e anche questo non ha funzionato.

+0

Avete controllato il vostro importazioni? A volte capita che ci sia una dichiarazione di importazione sbagliata. Il tuo onCheckedChangeListener è importato come segue: android.widget.CompoundButton.OnCheckedChangeListener? – Opiatefuchs

+0

Ho importato android.widget.CompoundButton' –

+0

forse un'alternativa è quella di: mySwitch.setOnCheckedChangeListener (new OnCheckedChangeListener() {}); invece di impostare su chekedChangeListener implementato. Potresti provare questo? – Opiatefuchs

risposta

8

Vedo che stai tentando di utilizzare PreferenceFragment come qualsiasi altro frammento normale. Tuttavia, è necessario prendere in considerazione il meccanismo corretto, un esempio è che non è possibile utilizzare tutti i widget per creare una vista delle preferenze per l'utente, è necessario utilizzare gli oggetti Preference (vedere sottoclassi Preferenza).

Un altro esempio è che è necessario utilizzare addPreferencesFromResource(int) per aumentare le preferenze da una risorsa XML.

Controllare entrambi i collegamenti sopra e questo example.

Spero che ti aiuti.

2

Se si utilizza l'anwser di Jorge Gil, non sarà possibile ottenere facilmente un riferimento alla vista che si sta dichiarando in PreferenceScreen. Tuttavia è possibile ottenere facilmente uno degli oggetti preferenza che in questo caso è uno SwitchPreference. Quindi nel tuo res/xml/preferences.xml aggiungi la tua preferenza interruttore:

<?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> 

Poi nella funzione onCreate PreferenceFragment/di PreferenceActivity aggiungere questo:

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; 
     } 
    }); 
Problemi correlati