如何将动态高度设置为片段活动中的列表视图..?

问题描述:

我需要在滚动视图中实现列表视图。 我知道在滚动视图中使用listview并不是个好主意,但它是应用程序的需求,所以我需要实现它。 在应用程序即时使用TabLayout 3种类型的标签,如类别1,类别2和类别3过滤数据。如何将动态高度设置为片段活动中的列表视图..?

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

即时尝试许多方法来给动态高度,但没有完成任务。

这里是我的方法试alredy -

-------------------第一-------------- ----------------- 第一个从问题

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

} 

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

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

+0

像你说的:不要这样做。我会建议使用另一种方法,或至少为我们提供当前状态的截图。 – finki

+0

好吧我将发布它 –

在你的活动XML文件,你可以使用的LinearLayout滚动型内,然后可以分配机器人:体重属性给他们。

您可以将权重分配给单个元素和所有其他元素,并调整它们各自的可用空间。

+0

不与重量工作 –

+0

如果你给第一个元素的固定高度,那么剩余空间将自动给予第二个元素。如果第二个元素不需要太多的空间,那么它们下面会留下一些空间。您不必为列表视图分配dyanmic空间。它将被自动分配。你可以使用'android:layout_width = wrap_content'。 – Saini

+0

非常感谢 –

更好的做法是,它使用支持视图动态变化的列表。并为您的问题有特别清单 - LinkedListView