listview中每个item的高度都是由里面的内容自适应的
这就会出现高度不一致的情况
又不能设置成固定高度(前面这些都是需求。。)
有没方法可以让高度低的调节到和其中的最大高度一致呢

解决方案 »

  1.   

    先一股脑填进去,然后遍历整个listview保留item的最大高度,再转回去把这个高度设给每个item
      

  2.   

    创建完之后如何遍历呢 我是新手
    我修改了listview的onMeasure方法
    我已经能够得到这个最大值 
    但是不知道在哪里能够进行对item高度的重新设置
      

  3.   

    目前的做法是 先生成了lisview 此时里面的item都是自适应高度
    因为一开始不知道最大高度是多少 所以必须先让他生成一遍吧
    生成之后才能使用getchildAt(positon)来取得对应的item 
    以此取得最大高度
    最后再把这个高度设置进每一个item
    但是不知道应该在什么时候设置进去,现在虽然代码写了 但是没有效果
    我的代码使用java code写的,没用xml
      

  4.   

    是写在适配器的 getview里面么?
      

  5.   

    public class ListViewSetHeight
    {
        public static void setheight(ListView listView)
        {
            ListAdapter listAdapter=listView.getAdapter();
            if(listAdapter==null){return;}
            int maxHeight=0;
            int itemNum=listAdapter.getCount();
            for(int i=0;i<itemNum;i++)
            {
                View listItem=listAdapter.getView(i,null,listView);
                listItem.measure(0,0);
                int thisHeight=listItem.getMeasuredHeight();//计算子项View的宽高
                maxHeight=(maxHeight>thisHeight)?(maxHeight):(thisHeight);
            }
            for(int j=0;j<itemNum;j++)
            {
                View listItem=listAdapter.getView(i,null,listView);
                ViewGroup.LayoutParams params=listItem.getLayoutParams();
                params.height=maxHeight;
                listItem.setLayoutParams(params);
            }
        }
    }试一试这个
      

  6.   

    LinearLayout llmain = new LinearLayout(context);
    llmain.setOrientation(LinearLayout.VERTICAL);

    lstView = new MyListView[devs.length];
    lstAdapter = new ListAdapter[devs.length]; for(int i = 0; i < devs.length; i++) {

    TextView txtHmgName = new TextView(context);
    txtHmgName.setText(devs[i].name);

    lstView[i] = new MyListView(context);
            
    lstAdapter[i] = new ListAdapter(context, devs[i]);
        lstView[i].setAdapter(lstAdapter[i]);
        lstView[i].setScrollContainer(false);
        lstView[i].setScrollingCacheEnabled(false);
      
        llmain.addView(txtHmgName);
        llmain.addView(lstView[i]);
        ListViewSetHeight.setheight(lstView[i]);
    }
    我已经将函数调用放在最后了 还是提醒NULLPOINTEREXCEPTION 应该在哪里调用呢
      

  7.   

    在listview 的onMeasure函数里添加了该段代码
    能够取得最大高度
    但是设置统一高度没有效果
      

  8.   

    直接设置进去的话 就写死了。。
    如果case很多,而且后续可能加进去的话 就比较麻烦
    我现在是在onmearue里计算出最大高度 
    然后再getview里面把最大高度设置给每个item
    这样做会浪费点资源,相当于把list画了2遍
    但是适应性强
      

  9.   


    把这个方法放在循环后面,参数用llmain