通过动态创建的按钮删除动态创建的 ViewGroup

Posted

技术标签:

【中文标题】通过动态创建的按钮删除动态创建的 ViewGroup【英文标题】:Removing a dynamically created ViewGroup by dynamically created button 【发布时间】:2013-06-18 19:40:46 【问题描述】:

我正在开发一个 android termostat 应用程序,并且我已经列出了一组项目(在代码中)。因此我动态添加按钮。当用户单击其中一个按钮时,我希望删除具有相同父级(LinearLayout)的所有视图。

如何编写一段代码来做到这一点?

在我创建此“条目”的代码下方。

private void createEntry(int entry)
    TableLayout my_root = (TableLayout) findViewById(R.id.day_root);
    LinearLayout A = new LinearLayout(this);
    A.setOrientation(LinearLayout.HORIZONTAL);
    A.setId(DYN_LAYOUT_ID + entry);
    ImageView im1 = new ImageView(this);
    ImageView im2 = new ImageView(this);
    im1.setImageResource(R.drawable.sun_small);
    im2.setImageResource(R.drawable.moon_small);

    TextView tv = new TextView(this);
    Button btn = new Button(this);
    btn.setText("remove");

    tv.setText(new StringBuilder().append(pad(sHour)).append(":").append(pad(sMinute))
            .append(" - ").append(pad(eHour)).append(":").append(pad(eMinute)));
    tv.setTextSize(20);
    A.addView(im1);
    A.addView(tv);
    A.addView(im2);
    A.addView(btn);
    my_root.addView(A);

编辑:我的初始尝试似乎确实解决了问题(更新了上述代码的一部分)

Button btn = new Button(this);
    btn.setId(BUTTON_ID + entry);
    btn.setOnClickListener(new OnClickListener() 

        @Override
        public void onClick(View v) 
            int row = v.getId() - BUTTON_ID;
            LinearLayout ll = (LinearLayout) findViewById(DYN_LAYOUT_ID + row);
            ll.removeAllViewsInLayout();    
        

    );

当点击btn时,所有属于该Button所属LinearLayout的view都会被移除。

【问题讨论】:

【参考方案1】:

所有ViewGroups 都有一些removeView() 的味道。您可能必须使用实例变量保留对某些视图的引用。

【讨论】:

感谢您的提示!我检查了所有功能,特别是我的 LinearLayout 的“容器”。函数 ll.removeAllViewsInLayout() 成功了! 很高兴它有帮助。此外,您应该改用removeAllViews()removeAllViewsInLayout() 用于视图层次结构的布局遍历。

以上是关于通过动态创建的按钮删除动态创建的 ViewGroup的主要内容,如果未能解决你的问题,请参考以下文章

删除动态创建的 UIButton 子视图

动态创建或删除表单元素

用户单击按钮时如何动态创建和删除视图[重复]

需要在按钮单击时隐藏/取消隐藏动态创建的下拉列表

如何创建自定义字符串并动态填充它?

通过 django 模板和 JS 的动态喜欢和不喜欢按钮的问题