打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在ScrollView 中嵌套ListView的问题


我们需要测量出LIstView的长度才能完全的显示ListVIew所有内容,然而很多时候每个ListVIew的Item的高度是不一样的,网上很多方法用的是对每一个Item调用measure(0,0)方法,然后height=item.getMeasureHeight()获得height,经过我的测试发现每个item的高度一样,也许是系统默认高度吧,这样的话测出的高度就不是正在的高度,也就不能完全显示所有的内容,这时候我考虑在Adapter的getView方法中进行测量,结果获得了每一个Item的准确高度。这时候要做的就是将每一个item的高度加起来,最后在设置ListView的LayoutParams。然而我们知道getView方法的调用是在手指滑动出一个新的item就调用,所以不能单纯的在getIView中将每个item的高度相加,这样会重复想加,所以我用一个HashMap来记录每个Item的position和height,因为getView方法是在用户滑动界面才调用,我们也不知道用户什么时候滑动界面,所以我用了一个线程来监测,
getView中测量代码:
[mw_shl_code=java,true]final View temp1 = convertView;
                        final int pos = position;
                        final ViewTreeObserver tree = temp1.getViewTreeObserver();
                        tree.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

                                @Override
                                public void onGlobalLayout() {
                                        temp1.getViewTreeObserver().removeGlobalOnLayoutListener(
                                                        this);
                                        map.put(pos, temp1.getHeight());
                                        Log.e("Pre Height", temp1.getHeight() + "");
                                }
                        });[/mw_shl_code]


Thread的代码:

[mw_shl_code=java,true]new Thread() {
                        @Override
                        public void run() {
                                while (!isBack) {是否点击back结束该Activity

                                        int size = map.size();
                                        int height = 0;
                                        for (int i = 0; i < size; i++) {
                                                height += map.get(i);
                                        }
                                        handler.sendEmptyMessage(height);
                                        try {
                                                Thread.sleep(1000);
                                        } catch (InterruptedException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                }
                        }
                }.start();[/mw_shl_code]


Handler的代码:

[mw_shl_code=java,true]final Handler handler = new Handler() {

                        @Override
                        public void handleMessage(Message msg) {
                                int h = msg.what;
                                ListAdapter listAdapter = commentListView.getAdapter();
                                if (listAdapter == null) {
                                        // pre-condition
                                        return;
                                }
                                ViewGroup.LayoutParams params = commentListView
                                                .getLayoutParams();
                                params.height = h
                                                + (commentListView.getDividerHeight() * (listAdapter
                                                                .getCount() - 1)) + 79;
                                commentListView.setLayoutParams(params);
                                super.handleMessage(msg);
                        }

                };[/mw_shl_code]

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android屏幕显示不全时使用ScrollView (SrollView与ListView的纠结)
Android adapter研究
Android设计模式系列(9)
ListView点击checkbox其他checkbox也被同时选中的问题
制作三星I9088 刷机ROM的实践(五)
Android 利用ListView制作带竖线的多彩表格
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服