【问题标题】:How to set the Dynamic height to list view in fragment activity..?如何在片段活动中设置动态高度以列出视图..?
【发布时间】:2016-11-08 10:31:26
【问题描述】:

我需要在滚动视图中实现列表视图。 我知道在滚动视图中使用 listview 不是一个好主意,但它是应用程序的要求,所以我需要实现它。 在应用程序中,我使用 TabLayout 和 3 类选项卡(如类别 1、类别 2 和类别 3)来过滤数据。

在第一个选项卡类别 1 中,我需要添加 2 个列表视图,一个是修复项目,第二个是动态的。 拳头列表视图是固定的,所以我可以给它固定的高度。 但第二个列表视图是动态的,所以我需要根据列表视图中的值总数给出高度。

我尝试了很多方法来提供动态高度,但没有完成任务。

这是我已经尝试过的方法:-

-------首先 --------------- ---- 首先来自问题

Android: How to measure total height of 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();
        Log.w("HEIGHT" + i, String.valueOf(totalHeight));

    }

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

}

-------第二个--------------- ---- 从问题 https://stackoverflow.com/questions/17693578

public static class ListUtils {
    public static void setDynamicHeight(ListView mListView) {
        ListAdapter mListAdapter = mListView.getAdapter();
        if (mListAdapter == null) {
            // when adapter is null
            return;
        }
        int height = 0;
        int desiredWidth = MeasureSpec.makeMeasureSpec(mListView.getWidth(), MeasureSpec.UNSPECIFIED);
        for (int i = 0; i < mListAdapter.getCount(); i++) {
            View listItem = mListAdapter.getView(i, null, mListView);
            listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
            height += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = mListView.getLayoutParams();
        params.height = height + (mListView.getDividerHeight() * (mListAdapter.getCount() - 1));
        mListView.setLayoutParams(params);
        mListView.requestLayout();
    }
}

-------错误-------

【问题讨论】:

  • 就像你说的:不要这样做。我建议使用另一种方法,或者至少向我们提供您当前状态的屏幕截图。

标签: android listview


【解决方案1】:

在您的 activity xml 文件中,您可以在 ScrollView 中使用 LinearLayout,然后可以分配 android:weight 属性。

您可以为单个元素和所有其他元素分配权重,在它们自己的可用空间中调整。

【讨论】:

  • 如果你给第一个元素固定高度,那么剩余空间将自动给第二个元素。如果第二个元素不需要太多空间,那么它们下方将保留一些空间。您不必为列表视图分配动态空间。它将自动分配。你可以使用android:layout_width=wrap_content
【解决方案2】:

更好的做法,它使用支持动态变化视图的列表。对于您的问题,有一个特殊列表 - LinkedListView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多