Réponses:
Vous pouvez remplacer n'importe quelle vue à tout moment.
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);
Si vous ne souhaitez pas remplacer déjà existant Voir , mais choisir entre option1 / option2 au moment de l' initialisation, vous pouvez le faire plus facilement: ensemble android:id
pour la mise en page de parent puis:
ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
Vous devrez définir "index" à la valeur appropriée en fonction de la structure des vues. Vous pouvez également utiliser un ViewStub : ajoutez votre vue C en tant que ViewStub puis:
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
De cette façon, vous n'aurez pas à vous soucier de la valeur "index" ci-dessus si vous souhaitez restructurer votre mise en page XML.
android.app.FragmentTransaction
sa replace()
méthode.
Et si vous faites cela très souvent, vous pouvez utiliser un ViewSwitcher ou un ViewFlipper pour faciliter la substitution de vue.
private void replaceView(View oldV,View newV){
ViewGroup par = (ViewGroup)oldV.getParent();
if(par == null){return;}
int i1 = par.indexOfChild(oldV);
par.removeViewAt(i1);
par.addView(newV,i1);
}
cela fonctionne dans mon cas, oldSensor et newSnsor - oldView et newView:
private void replaceSensors(View oldSensor, View newSensor) {
ViewGroup parent = (ViewGroup) oldSensor.getParent();
if (parent == null) {
return;
}
int indexOldSensor = parent.indexOfChild(oldSensor);
int indexNewSensor = parent.indexOfChild(newSensor);
parent.removeView(oldSensor);
parent.addView(oldSensor, indexNewSensor);
parent.removeView(newSensor);
parent.addView(newSensor, indexOldSensor);
}