ListView GridView 只显示一行 冲突

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ListView GridView 只显示一行 冲突相关的知识,希望对你有一定的参考价值。

ScrollView中嵌套GridView,ListView时只显示一行的解决办法,详见:http://blog.csdn.net/luohai859/article/details/39347583

 方法一:自定义ListView、GridView

public class MyListView extends ListView {

    public MyListView(Context context) {
        super(context);
    }
    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public MyListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}  
public class MyGridView extends GridView {
    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public MyGridView(Context context) {
        super(context);
    }
    public MyGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}  


方法二:通过计算子列高度和进行显示

    /**

     * 通过计算出来ListView或者GridView中的子列高度和进行显示
     */
    public void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();//获取ListView对应的Adapter
        if (listAdapter == nullreturn;
        int totalHeight = 0;
        //遍历item,计算item的宽高,统计出所有item的总高度
        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));//加上item间分隔符占用的高度
        //((MarginLayoutParams) params).setMargins(10, 10, 10, 10); // 根据情况决定是否设置margin值
        listView.setLayoutParams(params);
    }  


我使用第二种方式时遇到的小问题

注意:单独用一个ScrollView包住ListView时这种方法是无效的,此方法需要ScrollView的根节点是LinearLayout或者RelativeLayout
    <ScrollView
        android:id="@+id/sv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
            <ListView
                android:id="@+id/gv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </RelativeLayout>
    </ScrollView>  






以上是关于ListView GridView 只显示一行 冲突的主要内容,如果未能解决你的问题,请参考以下文章

ScrollView中嵌套GridView,ListView只显示一行的解决办法

解决ScrollView下嵌套ListView/GridView进页面不在顶部的问题以及数据显示不全的问题( 只显示一行)

ScrollView嵌套ListViewGridView只显示一行,psts显示不出来

android中ScrollView嵌套ListView或GridView显示位置问题

GridView嵌套在ScrollView里只有一行的问题

android listView嵌套gridview的使用心得