android - 重置 Inflated ListView 的高度,Listview 高度

标签 android android-listview android-studio

我有一个主要 Activity ,它的布局是一个 ScrollView ,并且有一个名为 [taskLayout] 的“线性布局”。

setContentView(R.layout.my_jobs_view_single_holder);
final LinearLayout taskLayout = (LinearLayout)findViewById(R.id.TaskLayout);

然后我膨胀另一个 View 并将 View 添加到主 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);

新添加的 View 有一个listView,它使用了一个

ADAPTER_PICKUP_PASSENGER extends BaseAdapter

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

主 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>

包含 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>

一切正常,除了 listView 的高度不是 WRAP_CONTENT 它只显示一项。当我更改 ListView 的

android:layout_height="fill_parent"

android:layout_height="200dp"

然后 ListView 获得 200dp 高度。由于某些原因,android:minHeight 没有任何效果。

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

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

  1. 在返回 convertView 之前的 Adapter 中,我尝试执行 parent.requestLayout();
  2. 给listview设置adapter后,listview.requestLayout()

没有任何反应。任何人都可以解释一下吗?

最佳答案

它将根据您的行高和宽度动态扩展您的 ListView 。

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();
}

关于android - 重置 Inflated ListView 的高度,Listview 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913929/

相关文章:

android - 与 RecyclerView 一起使用时 Picasso 图像错位问题

android - 如何将 Android FTrace 精度提高到微秒?

android - ListView 内可聚焦的 EditText

Android Listview Item-左右滑动得到一个TimePicker和DatePicker

android - generateSafeArgsDebug 任务执行时出错,XmlPullParserException 仅允许空白内容

android - 将谷歌眼镜连接到计算机

android - 当设备的操作栏/状态栏向下滚动时,警报对话框消失

android - ListView 指示更多可滚动项目

android - 我想在 android 中加密或混淆我的资源(XML 布局文件、字符串等)

android-studio - 如何检查 Gradle 依赖项是否有新版本?