Android布局在运行时用另一个视图替换视图

Chr*_*ian 167 android android-layout

我有一个xml-layout文件main,有两个textview A/B和一个视图C.我还有两个xml-layout文件option1option2.是否可以通过Java将任何一个option1option2在运行时加载到C中?如果是这样,我必须使用什么功能?

bro*_*oot 364

您可以随时替换任何视图.

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);
Run Code Online (Sandbox Code Playgroud)

如果您不想替换现有的View,但是在初始化时选择option1/option2,那么您可以更容易地做到:android:id为父布局设置然后:

ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
Run Code Online (Sandbox Code Playgroud)

您必须根据视图结构将"index"设置为正确的值.您还可以使用ViewStub:将您的C视图添加为ViewStub,然后:

ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
Run Code Online (Sandbox Code Playgroud)

这样,如果您想重构XML布局,就不必担心上面的"索引"值.

  • @KarlMorrison这个问题差不多有4年了,与片段无关.我建议提交一个新问题和/或看看`android.app.FragmentTransaction`和它的`replace()`方法. (3认同)
  • @AntonioSesto什么太复杂了?你在哪里感到困惑? (2认同)

Sni*_*las 42

如果你经常这样做,你可以使用ViewSwitcherViewFlipper来简化视图替换.

  • @snicolas ...请你用一些代码解释一下. (8认同)
  • @Shail Adi,您是否尝试过使用ViewSwitcher教程代码? (2认同)