উত্তর:
আপনি যে কোনও সময় যে কোনও দৃশ্য প্রতিস্থাপন করতে পারেন।
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);
দর্শনের কাঠামোর উপর নির্ভর করে আপনাকে যথাযথ মানটিতে "সূচক" সেট করতে হবে। আপনি একটি ভিউস্টাবও ব্যবহার করতে পারেন : ভি সিস্ট হিসাবে আপনার সি ভিউ যুক্ত করুন এবং তারপরে:
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
আপনি যদি আপনার এক্সএমএল লেআউট পুনর্গঠন করতে চান তবে আপনাকে উপরের "সূচক" মানের উপরে চিন্তা করতে হবে না।
android.app.FragmentTransaction
এবং এটির replace()
পদ্ধতি।
এবং যদি আপনি এটি খুব ঘন ঘন করেন তবে আপনি বিকল্প বদলাতে স্বাচ্ছন্দ্যে একটি ভিউসুইচার বা একটি ভিউ ফ্লিপার ব্যবহার করতে পারেন ।
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);
}
এটি আমার ক্ষেত্রে, ওল্ড সেন্সর এবং নতুন সেন্সর - ওল্ড ভিউ এবং নতুন ভিউতে কাজ করে:
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);
}