将新窗口小部件控件动态添加到现有布局

时间:2012-08-31 13:50:32

标签: android android-layout widget

我已经在堆栈上看到了这个问题,但信息没有帮助或成功,所以我仍然不太确定。

我要做的事情的主旨:
我有一个在xml中定义的布局,例如some_details_view.xml。

setContentView(R.layout.some_details_view);

它有一堆文本视图,使用父相对布局,线性页眉布局,线性页脚布局,中间滚动布局,包含一个相对布局,包含一些标签 - 值类型的文本视图。 在滚动视图相对布局的底部,我目前将框架布局放置为占位符。

在创建相应的活动时,我在相应的文本视图中设置文本,其中包含从上一个活动移交的数据;基本的东西。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white" >

    <LinearLayout
        android:id="@+id/header"

        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" >

                        ...some header content

    </LinearLayout>         

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical" >

        ..some footer content

    </LinearLayout>

    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/footer"
        android:layout_below="@+id/header"
        android:layout_margin="5dip" >


        <RelativeLayout
            android:layout_width="fill_parent"
            android:id="@+id/relativeScroll"
            android:layout_height="wrap_content" >

            ...text views in relative layout

            <FrameLayout
                android:id="@+id/placeholder"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_below="@+id/moreInfoValue" />

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

在为给定数据设置文本视图之后,我使用异步任务来获取一些其他数据,我想在静态表单布局的底部显示为历史列表类型。可能有0个或更多项目,所以我要么添加1个或更多文本视图,要么根本不添加。

在post执行中,我理解在主UI线程上运行,我尝试找到一个现有的容器布局/视图组并添加一个新的线性布局,我添加了新的文本视图,或者只是添加新的文本直接查看现有的容器布局。

这是我尝试过的最新内容:

ViewGroup mContainer = null; //defined as member variable of activity class and instatiated in on create
mContainer = (ViewGroup)findViewById(R.id.placeholder); //set in on create
LinearLayout ll = new LinearLayout(context); //on post execute of async task
ll.setOrientation(LinearLayout.VERTICAL);
mContainer.addView(ll); //add a new linear layout to an existing container layout
//add some new text view widgets items dynamically
for(NewDisplayItem item : items)
{
    TextView tv = new TextView(context);
    tv.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
    tv.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    tv.setText(item.getSomeText());
    ll.addView(tv); //add text view to new linear layout
}

当UI加载时,我没有看到在逐步浏览后看到添加到我的布局中的新项目,并且使用上面的代码观察控件的添加。

不确定它是什么,但除了它不起作用的事实外,这种方法似乎不对。当活动加载时,所有静态视图都会在视图中进行设置。我弹出一个加载对话框,逐步执行异步任务的东西,我想有望看到动态控件逐个添加到布局中?

2 个答案:

答案 0 :(得分:2)

首先,textView.setWidth(int)width作为参数(以像素为单位)。

其次,您还应该在要添加的LinearLayout上设置布局参数。

您应该设置LayoutParams的方式如下:

ll.setLayoutParams(new LinearLayout.LayoutParams(
       LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

同样适用于TextViews

答案 1 :(得分:1)

Ovidiu Latcu有一个很好的答案。一个很好的问题是:你有没有理由不使用ListView(有哪些情况下,他正在做的事情会更好)? ListView有很多机制可以帮助你避免耗尽RAM