Android 满足条件时从屏幕底部显示ListView(所有项目可见)

Android 满足条件时从屏幕底部显示ListView(所有项目可见),android,android-layout,listview,android-listview,Android,Android Layout,Listview,Android Listview,当收到URL响应时,我想显示一个带有一些项目的列表视图 要从底部显示ListView,我所做的是,将其放置在LinearLayout(其父级)的末尾,并将可见性设置为已消失 布局文件: </LinearLayout> . . . <!-- ListView at bottom --> <ListView android:id="@+id/places_list" android:layout_w

当收到URL响应时,我想显示一个带有一些项目的
列表视图

要从底部显示
ListView
,我所做的是,将其放置在LinearLayout(其父级)的末尾,并将
可见性设置为
已消失

布局文件:

</LinearLayout>
    .
    .
    .
    <!-- ListView at bottom -->
    <ListView
        android:id="@+id/places_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/gray"
        android:visibility="gone" >
    </ListView>

</LinearLayout>

但问题是,在这种布局中,
ListView
height仅为37。我理解这是因为
ListView
的末尾只有那么多的高度可用


但是,如何在列表内容更改时和显示前动态计算列表视图的高度,从而解决了我的问题。
ListView
正在从复制代码

public static void setListViewHeightBasedOnChildren(ListView ListView){
ListAdapter ListAdapter=listView.getAdapter();
如果(listAdapter==null){
//前提条件
回来
}
int totalHeight=0;
对于(int i=0;i
我解决了我的问题,当列表内容更改时,在显示
列表视图之前,动态计算
列表视图的高度
正在从复制代码

public static void setListViewHeightBasedOnChildren(ListView ListView){
ListAdapter ListAdapter=listView.getAdapter();
如果(listAdapter==null){
//前提条件
回来
}
int totalHeight=0;
对于(int i=0;i
使用包裹内容设置您的高度。@Segi尝试过。未解决。结果是什么。?与使用
match\u parent
相同。高度仍然仅为37。然后更改线性布局高度。。因为它使用了父级尺寸。请使用包裹内容设置您的高度。@Segi尝试过。未解决。结果是什么。?与使用
match\u parent
相同。高度仍然仅为37。然后更改线性布局高度。。因为它使用父级大小。
// Show listView that displays a list of items
private void showListView() {

    ObjectAnimator animator = null;
    placeListView.setVisibility(View.VISIBLE);

    // Display listView with animation 
    if (activeEditTextId == R.id.from_location) {

        animator = ObjectAnimator.ofFloat(placeListView, "y", fromLocation.getY() + fromLocation.getHeight() + 5);

    } else if (activeEditTextId == R.id.to_location) {

        animator = ObjectAnimator.ofFloat(placeListView, "y", toLocation.getY() + toLocation.getHeight() + 5);
    }

    animator.setDuration(2000);
    animator.start();

    listAdapter.notifyDataSetChanged();
}
public static void setListViewHeightBasedOnChildren(ListView listView) {

    ListAdapter listAdapter = listView.getAdapter(); 

    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;

    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}