在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中动态更改视图内的视图的主要内容,如果未能解决你的问题,请参考以下文章

android在单击按钮时更改列表视图内的图像视图

如何在运行时更改动态添加的 Android 视图中的数据

单击抽屉的任何项目而不在android中关闭时更改导航抽屉内的视图和内容

导航视图内的 UIView 更改

如何将标签内的标签快速传递给另一个视图控制器[关闭]

动态更改视图存根 layout_height 属性?