在Android中动态更改视图内的视图
Posted
技术标签:
【中文标题】在Android中动态更改视图内的视图【英文标题】:Dynamically change view inside view in Android 【发布时间】:2010-12-13 09:14:55 【问题描述】:我有这个RelativeView,顶部有3 个单选按钮。当用户单击其中一个按钮时,我想更改视图的底部。
蓝色部分是我要加载不同视图的地方。
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
if (checkedId == iVerzekeringen)
layout.removeView(body); // THIS PART IS
layout.addView(testview); // NOT WORKING
else if (checkedId == iPersoonlijk)
else if (checkedId == iNotities)
如何将不同的视图加载到蓝色部分?
【问题讨论】:
您是否考虑过使用 TabWidget 来完成相同的任务? 是的,我做到了,但我有一个保存按钮 (opslaan),它可以保存所有 3 个视图的信息。而且它看起来真的很“丑陋”,顶部或底部有一个大的“保存”按钮。 【参考方案1】:我找到了答案:
layout = (RelativeLayout)findViewById(R.id.rellayout);
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layout.addView(layoutInflater.inflate(R.layout.gegevens_verzekeringen, group, false), 1 );
这会在父 xml 上加载视图。我希望它仅将其加载到“身体”部分(图片中的蓝色部分)
我这样声明身体:
body = (RelativeLayout)findViewById(R.id.body);
但是当我这样做时body.addView(layoutInflater.inflate(R.layout.gegevens_verzekeringen, group, false), 1);
它是java.lang.IndexOutOfBoundsException: index=1 count=0
我该如何解决这个问题?
编辑:知道了:
body.addView(layoutInflater.inflate(R.layout.gegevens_verzekeringen, null));
【讨论】:
【参考方案2】: 使用findViewById
获取对每个RadioButton
的引用
在每个RadioButton
上使用setOnClickListener
注册OnClickListener
在您的 OnClickListener
回调中,加载不同的背景
【讨论】:
我已经有一种方法可以确定选择了哪个单选按钮。唯一的问题是我无法在当前视图中设置不同的 xml 视图。我已经为我的方法编辑了我的问题以上是关于在Android中动态更改视图内的视图的主要内容,如果未能解决你的问题,请参考以下文章