21

Nella mia classe frammento, aggiungo un elemento di vista del bambino di programmazione per il mio layout condizionale:Controllare se si aggiunge vista elemento al layout o no a livello di codice

LinearLayout child = (LinearLayout) inflater.inflate(R.layout.child_view, null); 

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,100); 

container.addView(child, params); 

Dal momento che il codice di cui sopra verrà eseguito in modo condizionale, così, a ad un certo punto, Vorrei verificare se la vista secondaria ha aggiunto o meno, come effettuare questo controllo a livello di programmazione?

+0

aggiungere una variabile bandiera che dice che la vista sono stati aggiunti. – RCB

risposta

19

penso che si può semplicemente utilizzare

findViewById(your_view_id) 

metodo: se il suo risultato è nullo la vista non esiste, altrimenti la vista è presente

+2

Questo è un calcolo molto pesante perché deve attraversare la gerarchia delle viste al di sotto del gruppo di visualizzazione, che può essere una tonnellata di visualizzazioni. l'altra risposta .getParent() è una ricerca sul campo –

+0

stai dicendo che i tecnici google hanno creato l'sdk di andorid in modo che all'inizio di ogni attività ogni app esegua un calcolo molto pesante una volta per ogni visualizzazione in un layout ?? Io non la penso così – Apperside

+1

bene, ecco perché il [ViewHolder] (http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder) patter esiste quando si utilizza ListView o RecyclerView, perché noi non voglio andare avanti attraverso la gerarchia ogni volta, se la gerarchia non cambia. E come ho detto, il tempo necessario dipende dalla profondità della gerarchia. Ma, come sempre, puoi andare su [source] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/ ViewGroup.java # 3610) se non mi credi. –

31

Se la creazione di vista tramite gonfiatore, è possibile controllare il suo genitore

if(view.getParent() != null) {...} 
18

Ci scusiamo per ritardo di risposta, ma si può provare questa alternativa:

utilizzare container.getChildCount(); prima di aggiungere e aggiungere una vista. Come:

int x = container.getChildCount(); 

container.addView(child, params); 

int y = container.getChildCount(); 

if(y > x) 
    Toast.makeText(context, "View Successfully Added!", Toas.LENGTH_SHORT).show(); 
3

non riesco a scrivere un commento in modo che scrivo qui come una soluzione: Dal livello di API 19 è possibile chiamare isAttachedToWindow() che non aiuta molto, ma se si sta puntando API 19 o superiore, allora questo dovrebbe funzionare con la documentazione.

1

Oppure, se si dispone di una vista esempio da trovare, si potrebbe:

if (container.indexOfChild(childView) == -1) { 
    // Add child to container. 
} 
Problemi correlati