2015-11-24 10 views
8

Ho creato uno SwitchPreference per l'app preferences della mia app.Perché SwitchPreference non mostra animazione quando si passa da on a off e viceversa?

Il problema è che il SwitchPreference non mostra l'animazione quando sto passando da & a spento, piuttosto, sta passando con uno scatto improvviso.

Ecco il codice preferences.xml del file:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <SwitchPreference 
     android:id="@+id/notification" 
     android:key="notification" 
     android:title="@string/notification" 
     android:defaultValue="true"/> 
</PreferenceScreen> 

Sono un principiante, quindi si prega di cooperare & fatemi sapere cosa c'è che non va qui.

Grazie in anticipo.

+0

Lo stesso problema qui. Una delle mie SwitchPreferences si comporta in questo modo. È strano perché solo 1 su 5 preferenze non ha un'animazione. Il file xml si trova in xml-v21. – koras

+0

Per espandere su questo, sto vedendo una cosa simile quando più switch e caselle di controllo sono in una schermata delle preferenze. L'ultima casella di controllo o opzione non si anima nel mio progetto. Funziona in un progetto di esempio. Entrambe le attività (esempio e il mio progetto) utilizzano lo stesso tema e file. Non riesco a capire perché questo succede – MadTom

+0

Sì, voglio anche sapere che per me è lo stesso:/ – xdevs23

risposta

3

cause

ho notato che un paio di cose diverse potrebbero causare l'animazione di andare mancante per i miei SwitchPreference oggetti:

  1. se il SwitchPreference è il primo Preference nell'attività impostazioni.

  2. se estendo il SwitchPreference e lo uso invece (post describing a similar problem).

correzioni

Per evitare il primo problema, ho creato una classe DummyPreference che ho usato come il primo Preference in invece il PreferenceScreen. Esempi di seguito.

DummyPreference.java

public class DummyPreference extends Preference 
{ 
    public DummyPreference(Context context,AttributeSet attrs) 
    { 
     super(context,attrs); 
    } 

    @Override 
    public View getView(View convertView,ViewGroup parent) 
    { 
     View v = new View(getContext()); 
     v.setVisibility(View.GONE); 
     return v; 
    } 
} 

pref_whatever.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <com.exaple.DummyPreference/> 
    <!-- other preference controls here --> 
</PreferenceScreen> 

Per evitare il secondo problema, ho dovuto ricorrere solo per utilizzando semplici vecchi Preference classi di Android nel XML, e ho spostato qualsiasi logica aggiuntiva necessaria in Activity o Fragment contenente gli oggetti Preference.

So che questo è un vecchio post. Spero solo che possa aiutare qualcun altro in futuro.

0

Ho avuto un problema simile con Checkboxes, immagino che potrebbe essere lo stesso problema. La riga del problema sembra essere sotto la classe genitore, la funzione setChecked() di TwoStatePreference. La linea notifyChanged() in realtà sta dicendo la preferenza per ridisegnarsi, il che significa che apparirà improvvisamente come selezionato. È possibile estendere SwitchPreference e basta ignorare quella funzione e commentare quella linea, dovrebbe funzionare bene, a patto che non ci sia qualcos'altro in quella preferenza per ridisegnarsi.

@Override 
public void setChecked(boolean checked) { 
    // Always persist/notify the first time; don't assume the field's default of false. 
    final boolean changed = mChecked != checked; 
    if (changed || !mCheckedSet) { 
     mChecked = checked; 
     mCheckedSet = true; 
     persistBoolean(checked); 
     if (changed) { 
      notifyDependencyChange(shouldDisableDependents()); 
      //notifyChanged(); *******THIS IS REDRAWING THE VIEW IMMEDIATELY 
     } 
    } 
} 
0

ho avuto anche questo problema, e avevo provato ogni soluzione notato in StackOverflow, ma ancora non può risolvere il questions.It di sembra un bug di Android, quando si tenta di estendere sottoclasse di preferenza, l'animazione scomparirà. Vedi qui per la loro voce bugtracker.

Infine ho trovato la soluzione, creo una classe estende Preference e imposto il layout che contiene un componente switch e gestisco l'evento click in una classe personalizzata, l'animazione dello switch funziona correttamente.

file XML per lo più come:

<com.test.MyPreference> 
<!--can define custom_switch_layout.xml base on preference_material.xml--> 
android:layout="@layout/custom_switch_layout" 
android:key="new_switch" 
android:title="pref_switch_title"</com.test.MyPreference> 
Problemi correlati