Yanıtlar:
Herhangi bir görünümü istediğiniz zaman değiştirebilirsiniz.
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);
Zaten var olan Görünümü değiştirmek istemezseniz , ancak başlatma zamanında option1 / option2 arasından seçim yaparsanız, bunu daha kolay yapabilirsiniz: android:id
üst düzen için ayarlayın ve ardından:
ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
Görünüm yapısına bağlı olarak "index" değerini uygun değere ayarlamanız gerekir. Ayrıca bir ViewStub kullanabilirsiniz : C görünümünüzü ViewStub olarak ekleyin ve ardından:
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
Bu şekilde, XML mizanpajınızı yeniden yapılandırmak istiyorsanız yukarıdaki "endeks" değeri konusunda endişelenmenize gerek kalmaz.
android.app.FragmentTransaction
ve bu kadar replace()
yöntemi.
Eğer çok sık yaparsanız, bir kullanabilirsiniz ViewSwitcher veya ViewFlipper kolaylığı görünümü ikamesine.
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);
}
benim durumumda çalışır, oldSensor ve newSnsor - oldView ve 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);
}