जवाबों:
आप किसी भी समय किसी भी दृश्य को बदल सकते हैं।
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 / विकल्प 2 के बीच चयन करें, तो आप यह आसान कर सकते हैं: android:idपैरेंट लेआउट के लिए सेट करें और फिर:
ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
आपको विचार संरचना के आधार पर "इंडेक्स" को उचित मूल्य पर सेट करना होगा। आप ViewStub का उपयोग भी कर सकते हैं : View C के रूप में अपना C दृश्य जोड़ें और फिर:
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
इस तरह से आपको ऊपर "इंडेक्स" मान के बारे में चिंता करने की ज़रूरत नहीं होगी यदि आप अपने XML लेआउट का पुनर्गठन करना चाहते हैं।
android.app.FragmentTransactionऔर यह replace()विधि है।
और अगर आप ऐसा बहुत बार, आप एक इस्तेमाल कर सकते हैं ViewSwitcher या एक ViewFlipper आसानी दृश्य प्रतिस्थापन के लिए।
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);
}
यह मेरे मामले में काम करता है, पुराने सेंसर और newSnsor - oldView और 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);
}