W każdej chwili możesz zamienić dowolny widok.
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ępować już istniejącego widoku , ale wybierasz między opcją 1 / opcją 2 w czasie inicjalizacji, możesz to zrobić łatwiej: ustaw 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 odpowiednią wartość w zależności od struktury widoków. Możesz także użyć ViewStub : dodaj swój widok C jako ViewStub, a następnie:
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
W ten sposób nie będziesz musiał martwić się o wartość powyżej „indeksu”, jeśli będziesz chciał przebudować swój układ XML.
android.app.FragmentTransaction
jegoreplace()
metodzie.Jeśli robisz to bardzo często, możesz użyć ViewSwitcher lub ViewFlipper, aby ułatwić zastępowanie widoku.
źródło
źródło
działa w moim przypadku, oldSensor i newSnsor - oldView i newView:
źródło