Вы можете заменить любое представление в любое время.
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);
Если вы не хотите заменять уже существующее представление , а выбираете между option1 / option2 во время инициализации, вы можете сделать это проще: установите android:id
для родительского макета, а затем:
ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
Вы должны будете установить «index» на правильное значение в зависимости от структуры представлений. Вы также можете использовать ViewStub : добавить ваш вид C как ViewStub, а затем:
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
Таким образом, вам не придется беспокоиться о значении «index» выше, если вы захотите реструктурировать макет XML.
android.app.FragmentTransaction
и этоreplace()
метод.И если вы делаете это очень часто, вы можете использовать ViewSwitcher или ViewFlipper для облегчения замены представления.
источник
источник
в моем случае это работает, oldSensor и newSnsor - oldView и newView:
источник