8

目前我有以下布局

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 

    android:layout_marginTop="9px" 
    android:layout_below="@+id/desc" 
    android:id="@+id/ll_item"  
    android:orientation="vertical" 
    android:paddingRight="3px" 
    android:paddingLeft="3px" 
    android:paddingBottom="5px" 
    android:paddingTop="5px" 
    android:background="@drawable/rounded_corner_lists" >
<!--
        <ListView android:drawSelectorOnTop="false" android:id="@+id/lv"    android:layout_height="fill_parent" android:layout_width="wrap_content" android:divider="#ddd" android:dividerHeight="1px" android:background="@drawable/white"    />
    -->
    </LinearLayout>

我已注释掉的列表视图,我试图在 xml 中进行此操作,高度设置为 wrap_content,fill_parent,目前我正在使用以下代码以编程方式执行此操作

LinearLayout ll_item = (LinearLayout) this.findViewById(R.id.ll_item);
        if(list.length() > 0)
        {
            ll_item.setVisibility(View.VISIBLE);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,calcListHeight(list));

            listview = new ListView(this);
            listview.setBackgroundResource(R.drawable.white);
            listview.setDivider( new ColorDrawable(this.getResources().getColor(R.drawable.dividercolor)) );
            listview.setDividerHeight(1);
            listview.setCacheColorHint(0);

            mAdapter  = new JSONAdapter( list, this );
            listview.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged();
            ll_item.addView(listview, lp);
        }

这是结果

替代文字

替代文字

所以你可以在这张图片中看到,因为我在线性布局中包含列表视图以获得圆角外观,它不仅会自动拉伸以包含整个列表视图,有没有办法让这两个元素换行内容垂直所以没有我以编程方式设置高度就没有滚动?? ?

我想我应该提到的另一件事是我在滚动视图中拥有所有这些布局,因为我希望这个列表视图成为整个布局的一小部分,所以它就像

-scrollview
-textview
-textview

-linearlayout
-listview

- 按钮

这是我所拥有的更简单的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent"
              android:background="@drawable/bg" xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/titlebar">

    <ScrollView android:id="@+id/sv" android:layout_width="fill_parent" android:background="@drawable/bg"
                android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

        <RelativeLayout android:id="@+id/widget28"
                        android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="4dip"
                >


            <LinearLayout android:orientation="vertical" style="@style/rounded_corner_full_width_button"
                          android:id="@+id/editfields">

                <ListView android:drawSelectorOnTop="false" android:id="@+id/lv" android:layout_height="fill_parent"
                          android:layout_width="wrap_content" android:divider="#ddd" android:dividerHeight="1px"
                          android:background="@drawable/white"/>

            </LinearLayout>
        </RelativeLayout>
    </ScrollView>
</LinearLayout>
4

2 回答 2

18

ListViews 不进入 ScrollViews。

ListView 用于有效地将有限的窗口显示到无限制的内容中。如果您要在 ListView 上“禁用滚动”以将其放在 ScrollView 中,那么您首先会失去使用 ListView 的所有实际理由。

如果您想使用 ListView 显示大量内容或无界内容,但也有上下滚动的内容,请使用addHeaderView或向 ListView 添加页眉或页脚视图addFooterView。如果列表内容将成为您描述的整体布局的一小部分,那么这可能不是您的最佳方法。

如果您有一小部分有界的内容要呈现,请继续使用 ScrollView 并在适当的情况下以编程方式为您的“列表项”生成子视图。

框架中用于混合膨胀的 XML 内容和以编程方式生成的内容的一种常见模式是在布局 XML 中添加一个占位符视图,通常是 aLinearLayoutFrameLayout. 用于findViewById在运行时定位它并向其添加生成的子视图。

ListAdapter如果您已经编写了一个,您甚至可以仍然使用这种方法,只需content.addView(adapter.getView(position, null, content))为所有适配器位置调用循环(您使用 定位content的占位符视图在哪里findViewById)。请注意,这仅在您知道适配器中有少量列表项时才实用!

于 2010-08-17T21:39:30.907 回答
0

在列表末尾添加一个空项目

例子:

ArrayList<String> options = new ArrayList<String>();
String lastItem = "";
int lastPosition;

options.add(lastItem);

public function addItem() {
    lastPosition = options.size() - 1;
    lastItem = options.get(lastPosition);
    options.remove(lastPosition);

    //add new items dynamically
    for (int i = 0; i < 5; i++) 
        options.add("new item: "+i);

    //add empty item
    options.add(lastItem);
}
于 2015-04-07T06:30:32.200 回答