zoukankan      html  css  js  c++  java
  • 解决ScrollView中嵌套ListView(本文为CornerListView)时显示异常的问题

      之前曾经就是做项目的时候,因为CornerListView的界面显示比较不错,所以经常用,但是突然发现嵌套在ScrollView中就会经常出现排布异常,很是苦恼的东西,两个不错的模块竟然无法存在,难道真的是“一山不容二货”,鱼与熊掌不可兼得?

      没办法,还是都想要,所以就想办法了!

      查资料,自己测试,终于有了解决方案!

    首先看布局文件(不用变的):

     1  <com.example.car_fast.view.CornerListView
     2                     android:layout_marginTop="10dip"
     3                     android:layout_marginLeft="10dip"
     4                     android:layout_marginRight="10dip"
     5                     android:layout_marginBottom="10dip"
     6                     android:id="@+id/qiyejianjie_list"
     7                     android:layout_width="fill_parent"
     8                     android:layout_height="wrap_content"
     9                     android:background="@drawable/shape_bg_listview"
    10                     android:layout_gravity="center"
    11                     android:divider="#ff996699"
    12                     android:dividerHeight="1dip"
    13                     android:cacheColorHint="#00000000"
    14                     android:listSelector="#00000000" />

    接着就是具体的更改方案了:

    首先,我们要做的是:

    1.添加一个类Utility,在类中自定义一个全局的静态方法

    setListViewHeightBasedOnChildren(ListView listView)

    2.Utility.java 内容如下

    package com.example.car_fast.dialog;
    
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    
    public class Utility {
            public static void setListViewHeightBasedOnChildren(ListView listView) {
        
            ListAdapter listAdapter = listView.getAdapter(); 
            if (listAdapter == null) {
                return;
            }
        
            int totalHeight = 0;
            for (int i = 0, len = listAdapter.getCount(); i < len; 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);
        }
    }

    其次,先看原始代码(只写重要的部分吧):

    //省略
    //
    adapter=new SimpleAdapter(Qiyejianjie.this,
                    arrayList, R.layout.simple_list_item_1, new String[]{"title"}, new int[]{R.id.item_title});
            cornerListView.setAdapter(adapter);
            
            cornerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    //
    //省略

    更改后的代码:

    //省略
    //
    adapter=new SimpleAdapter(Qiyejianjie.this,
                    arrayList, R.layout.simple_list_item_1, new String[]{"title"}, new int[]{R.id.item_title});
            cornerListView.setAdapter(adapter);
                        
            Utility.setListViewHeightBasedOnChildren(cornerListView);
            
            cornerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    //
    //省略    

    只要结果,只要你稍微测试下,都是so easy的一件事儿!

    方法,点到为止。

  • 相关阅读:
    JavaScript事件处理
    JavaScript模拟"类"的三种方法
    非构造函数的继承和拷贝
    构造函数的继承
    vim开发环境
    socket之非阻塞
    网络编程
    多线程
    消息队列
    信号
  • 原文地址:https://www.cnblogs.com/cuixiaodong427/p/3103161.html
Copyright © 2011-2022 走看看