Ви можете будь-коли замінити будь-який вид.
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);
Якщо ви не хочете замінювати вже існуючий вигляд , але вибираєте параметр1 / option2 під час ініціалізації, ви можете зробити це простіше: встановіть android:id
батьківський макет, а потім:
ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
Вам доведеться встановити "індекс" на належне значення залежно від структури переглядів. Ви також можете використовувати ViewStub : додайте свій погляд C як ViewStub, а потім:
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
Таким чином, вам не доведеться турбуватися про вище "індекс" значення, якщо ви хочете реструктурувати ваш XML макет.