2013-06-12 17 views
6

Mam złożony widok, zawierający kilka subviews, takich jak widoki tekstu i widoki obrazów. Chciałbym zastąpić jeden z widoków obrazu innym (pochodnym) widokiem obrazu (drugi obsługuje ładowanie obrazów w tle).Jak zamienić widok programowo w systemie Android?

Jak wymienić oryginalny widok obrazu na nowy?

Rozwiązanie Obecnie mam właśnie kopia wklejanie cały układ XML i wykonaj zastąpić w nowym formacie XML - bardzo zła, a nie powielać ponowne rzeczy :(

+0

Wklej kod –

+1

Moja wymówka dla duplikatu: Google go nie znalazło, mimo że dałem mu +1. Hmmm ... –

Odpowiedz

24

nie jestem pewien, że rozumiem co mówisz, ale jeśli po prostu chcesz usunąć jedną instancję Widok z układem i wymieniać go innym można użyć klasę użytkową takiego:

import android.view.View; 
import android.view.ViewGroup; 

public class ViewGroupUtils { 

    public static ViewGroup getParent(View view) { 
     return (ViewGroup)view.getParent(); 
    } 

    public static void removeView(View view) { 
     ViewGroup parent = getParent(view); 
     if(parent != null) { 
      parent.removeView(view); 
     } 
    } 

    public static void replaceView(View currentView, View newView) { 
     ViewGroup parent = getParent(currentView); 
     if(parent == null) { 
      return; 
     } 
     final int index = parent.indexOfChild(currentView); 
     removeView(currentView); 
     removeView(newView); 
     parent.addView(newView, index); 
    } 
} 

Follow-up pytanie: co to znaczy, kiedy "Mówię" bardzo źle duplikować i nie używać ponownie "? Czy wiesz o include tag?

+0

Zapisując kontynuację, 'include' jest dobre, gdy chcesz dodać istniejący układ do innego. Tutaj chcę zastąpić widok w innym - programowo - nie czas kompilacji. –

+1

Mały dodatek: przed dodaniem 'newView' do obiektu nadrzędnego w' replaceView', może być przydatne skopiowanie identyfikatora currentViews: 'newView.setId (currentView.getId());' tak, aby 'findViewById' zwracało' newView' –

Powiązane problemy