【问题标题】:How to add/remove dynamically a layout (Relative, Linear,...) inside another one?如何在另一个布局中动态添加/删除布局(相对,线性,...)?
【发布时间】:2013-12-31 23:56:43
【问题描述】:

我正在编写一个要求用户填写动态表单的应用程序。

用户可以从此页面动态添加或删除组件(Button、EditText、...)。

为此,我创建了一个带有 listView 的个人适配器,并在需要时添加或删除一个元素。但是如果你添加很多元素,布局很快就会被填满,所以我使用了一个滚动视图。

在网上长时间冲浪后,我读到不建议在 ScrollView 内创建 ListView(2 个列表可能会产生冲突)。 事实上,当我同时使用两者时,ListView 的大小不会刷新。我试图用 ViewTreeObserver 解决这个问题,但这不是一个干净的解决方案......它需要很多 CPU......:/

之后,我尝试创建一个“扩展线性布局”类,但我看不到如何通过单击按钮来捕获事件以添加或删除组件。

是否可以创建一个对象(从 xml 布局)并动态添加或删除它(不同的 ID,...)?

如何制作动态页面?有可能吗?

感谢您的帮助!!!

这是我的应用程序的图片:http://postimg.org/image/5shoatvl1/

【问题讨论】:

    标签: android listview layout dynamic scrollview


    【解决方案1】:

    您可以使用 LayoutInflater 为 XML 对象(如 LinearLayout 或 ListView)充气: http://developer.android.com/reference/android/view/LayoutInflater.html

    完成此操作后,您可以将任何视图添加到 ViewGroup,例如:如果您想将按钮添加到 ScrollView,您只需调用:

    scrollView.addView(button);
    

    您可以对任何实现 View 类的对象执行此操作。这包括 LinearLayout 和 ScrollView。

    您可以通过在其父级的目标视图上调用 removeView 来删除视图。例如,您想删除您只需调用的按钮:

    scrollView.removeView(button);
    

    您还可以遍历所有视图并删除满足特定条件的视图,如下所示:

    for(int i=0; i<((ViewGroup)v).getChildCount(); ++i) {
       View nextChild = ((ViewGroup)v).getChildAt(i);
       if(v.meetsReq()) {
           //do something
       }
    }   
    

    【讨论】:

      【解决方案2】:

      您可以创建只能显示edittext的布局文件。当edittext动态附加到您的视图中时,然后对该视图进行膨胀并添加到您的主视图中。因此,每当您使用inflator动态添加或删除任何视图时。

      LayoutInflater layoutInflater = (LayoutInflater) viewImageDetailView
                      .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      View convertView = layoutInflater.inflate(
                          R.layout.xml_edittext, null, false);
      

      希望对你有用...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-17
        • 1970-01-01
        相关资源
        最近更新 更多