2010-07-26 46 views

回答

319

您可以取代在任何时间任何观点。

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之间选择,那么你可以这样做更容易:

ViewGroup parent = (ViewGroup) findViewById(R.id.parent); 
View C = getLayoutInflater().inflate(optionId, parent, false); 
parent.addView(C, index); 
:父布局,然后设置 android:id

根据视图结构,您必须将“索引”设置为适当的值。你也可以使用一个ViewStub:增加你的C视图ViewStub然后:

ViewStub C = (ViewStub) findViewById(R.id.C); 
C.setLayoutResource(optionId); 
C.inflate(); 

这样,你就不必担心上面的“指数”值,如果你将要调整你的XML布局。

+0

我必须删除片段,还是将片段也删除? – 2014-07-07 23:59:56

+3

@KarlMorrison这个问题已经快4年了,与碎片无关。我建议提交一个新问题和/或看一下'android.app.FragmentTransaction',它是'replace()'方法。 – lupz 2014-07-11 09:13:41

+0

这太遗憾了你的回答太复杂了 - 对于新手Android程序员来说:-( – 2015-02-04 21:07:09

36

如果你这样做,很多时候,你可以使用一个ViewSwitcherViewFlipper缓解视图替换。

+0

是,如果有交替的看法问题,然后查看鳍/切换器是更好地使用 – Zoombie 2011-08-04 15:10:39

+7

@snicolas ......你可以用一些代码解释吧。 – 2012-11-21 13:55:50

+2

@Shail Adi,你是否尝试使用ViewSwitcher教程代码? – Snicolas 2012-11-21 14:03:26

相关问题