重置膨胀ListView的高度,Listview高度

kri*_* KM 1 android android-listview android-studio

我有一个主要活动,它的布局是一个scrollView,并有一个名为[taskLayout]的"线性布局".

setContentView(R.layout.my_jobs_view_single_holder);
final LinearLayout taskLayout = (LinearLayout)findViewById(R.id.TaskLayout);
Run Code Online (Sandbox Code Playgroud)

然后我正在膨胀另一个视图并将视图添加到主scrollviews.TaskLayout部分.

LayoutInflater pickup_inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = pickup_inflater.inflate(R.layout.my_jobs_view_single_pickup,null);
taskLayout.addView(view);
Run Code Online (Sandbox Code Playgroud)

新添加的视图有一个使用的listView

ADAPTER_PICKUP_PASSENGER extends BaseAdapter
Run Code Online (Sandbox Code Playgroud)

从外部数据库异步加载数据的位置.

主scrollview布局如下所示:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fullscreen_content"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5dp"
    android:background="#0099cc">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:id="@+id/TaskLayout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:orientation="vertical">
        </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

包含listView的布局如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fullscreen_content"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="top"
    android:background="@color/bg"
    android:orientation="vertical">
<ListView
            android:padding="2dp"
            android:background="@drawable/border"
            android:id="@+id/lst_passenger_pickup"
            android:layout_width="fill_parent"
            android:minHeight="200dp"
            android:layout_height="fill_parent">
        </ListView>
Run Code Online (Sandbox Code Playgroud)

一切正常,除了listView的高度不是WRAP_CONTENT它只显示一个项目.当我改变ListView的时候

android:layout_height="fill_parent"
Run Code Online (Sandbox Code Playgroud)

android:layout_height="200dp"
Run Code Online (Sandbox Code Playgroud)

然后ListView获得200dp的高度.由于某些原因,android:minHeight没有任何影响.

理想情况下,我希望将hight设置为WRAP_CONTENT,以便可以查看所有项目,但它不起作用,但WRAP_CONTENT或FILL_PARENT只显示一个项目,如果列表只有一个项目,则设置手动高度200dp有时太大了.

到目前为止,我尝试了以下步骤:

  1. 在返回convertView之前的Adapter中,我试着做parent.requestLayout();
  2. 将适配器设置为listview后,listview.requestLayout()

什么都没发生.有人可以解决一些问题吗?

Ana*_*ani 7

它会根据您的行高和宽度动态扩展您的列表视图.

public static void getTotalHeightofListView(ListView listView) {

    ListAdapter mAdapter = listView.getAdapter();

    int totalHeight = 0;

    for (int i = 0; i < mAdapter.getCount(); i++) {
        View mView = mAdapter.getView(i, null, listView);

        mView.measure(
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),

                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

        totalHeight += mView.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (mAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}
Run Code Online (Sandbox Code Playgroud)