2010-07-26 16 views

Odpowiedz

319

Możesz zastąpić dowolny widok w dowolnym momencie.

int optionId = someExpression ? R.layout.option1 : R.layout.option2; 

View C = findViewById(R.id.C); 
ViewGroup parent = (ViewGroup) C.getParent(); 
int index = parent.indexOfChild(C); 
parent.removeView(C); 
C = getLayoutInflater().inflate(optionId, parent, false); 
parent.addView(C, index); 

Jeśli nie chcesz zastąpić już istniejące View, ale wybierać między opcja1/opcja2 w czasie inicjalizacji, to można to zrobić łatwiej: set android:id dla układu nadrzędnego, a następnie:

ViewGroup parent = (ViewGroup) findViewById(R.id.parent); 
View C = getLayoutInflater().inflate(optionId, parent, false); 
parent.addView(C, index); 

Będziesz musiał ustawić "indeks" na właściwą wartość w zależności od struktury widoków. Można również użyć ViewStub: dodaj swój pogląd jako ViewStub C, a następnie:

ViewStub C = (ViewStub) findViewById(R.id.C); 
C.setLayoutResource(optionId); 
C.inflate(); 

ten sposób nie będziesz musiał martwić się o ponad „wskaźnik” wartości, jeśli będzie chciał zrestrukturyzować swój układ XML.

+0

Czy muszę usunąć fragment, czy też fragment zostanie usunięty? –

+3

@KarlMorrison To pytanie ma prawie 4 lata i nie ma nic wspólnego z fragmentami. Proponuję złożyć nowe pytanie i/lub rzucić okiem na "android.app.FragmentTransaction" i metodę 'replace()'. – lupz

+0

Szkoda, że ​​twoja odpowiedź jest zbyt skomplikowana - w komentarzach - dla początkujących programistów Androida :-( –

36

A jeśli robisz to bardzo często, możesz użyć opcji ViewSwitcher lub ViewFlipper, aby ułatwić zastępowanie widoku.

+0

Tak, jeśli jest pytanie o alternatywne widoki, to zobacz flipper/switcher lepiej użyć – Zoombie

+7

@snicolas ... możesz to wyjaśnić za pomocą kodu. –

+2

@Shail Adi, czy próbowałeś goole tutorial code ViewSwitcher? – Snicolas

Powiązane problemy