Sie können jede Ansicht jederzeit ersetzen.
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);
Wenn Sie die bereits vorhandene Ansicht nicht ersetzen möchten , sondern bei der Initialisierung zwischen Option1 / Option2 wählen möchten, können Sie dies einfacher tun: Legen Sie das android:id
übergeordnete Layout fest und dann:
ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
Sie müssen "index" abhängig von der Ansichtsstruktur auf den richtigen Wert setzen. Sie können auch einen ViewStub verwenden : Fügen Sie Ihre C-Ansicht als ViewStub hinzu und dann:
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
Auf diese Weise müssen Sie sich keine Gedanken über den "Index" -Wert machen, wenn Sie Ihr XML-Layout neu strukturieren möchten.
android.app.FragmentTransaction
und diereplace()
Methode.Und wenn Sie dies sehr oft tun, können Sie einen ViewSwitcher oder einen ViewFlipper verwenden , um das Ersetzen der Ansicht zu vereinfachen.
quelle
quelle
es funktioniert in meinem Fall, oldSensor und newSnsor - oldView und newView:
quelle