2013-03-20 8 views
20

Ho personalizzatoView che viene aggiunto dinamicamente più volte nella stessa attività.La vista Android disattiva il mantenimento implicito dello stato per alcune viste

Ciascuna istanza di visualizzazione personalizzata ha accanto ad altre cose un figlio TextView. Il TextView ha il suo ID ed è lo stesso per ogni istanza di visualizzazione.

Per ogni istanza di visualizzazione personalizzata, ho impostato diverso Text per TextView quando viene creata un'attività. Quando ruoto lo schermo, l'attività viene ricreata ma ora ogni TextView visualizza lo stesso Text (il testo è uguale al testo dell'ultima istanza).

Questo perché il salvataggio e il ripristino dello stato dell'istanza salva automaticamente alcune informazioni, ma queste informazioni sono ovviamente collegate agli ID e nel mio caso crea il problema.

C'è un modo per disabilitare il mantenimento automatico dello stato per viste particolari?

Esiste una proprietà o un'impostazione o qualche soluzione?

risposta

38

È possibile utilizzare il metodo View.setSaveEnabled (boolean enabled).

E 'anche possibile disabilitare il salvataggio automatico dello stato tramite xml utilizzando saveEnabled attributo android:saveEnabled="false"

+0

Esattamente quello di cui avevo bisogno e funziona! Grazie! – Dusan

+0

Risposta salvavita! Grande! –

+0

Nel mio caso è utile anche evitare che 'RecyclerView' salvi lo stato' StaggeredGridLayoutManager' sul cambio di orientamento e si blocca con un 'ArrayIndexOutOfBoundsException' sul ripristino con un conteggio span errato. – 0101100101

1

se avete bisogno di applicare setSaveEnabled per ogni gerarchia:

public static void SaveEnableViewAndChildren(this View view, bool val) 
    { 
     if (view == null) 
      return; 
     view.SaveEnabled = val; 

     var viewGroup = view as ViewGroup; 
     if (viewGroup == null) 
      return; 
     for (int i = 0; i < viewGroup.ChildCount; i++) 
      SaveEnableViewAndChildren(viewGroup.GetChildAt(i), val); 
    } 
Problemi correlati