3min初识ListView(3)-背后的设计模式和知之甚少的小优化

今天我们一起来学习一下ListView背后的设计模式(MVC)和知之甚少的小优化,Android的优化有时很简单,仅仅就是一行代码的事。

几段话简单概括ListView的MVC设计模式:

ListView展示数据的原理-MVC(JavaWeb-Android):

Model模型数据-JavaBean

View视图-JSP-ListView

Controller控制器-Servlet-Adapter


接下来是ListView知之甚少的小优化,他的高度和getView方法被调用的次数。

首先修改代码:

       @Override
        public int getCount() {
            return 6;
        }


return 6 即显示6条数据。

相应的调用6次getView方法,我们在里面Log一下输出内容。

        //获取View,作为ListView的一个条目显示
        @Override
        public View getView(int position, View convertView, ViewGroup viewGroup) {
            TextView tv;
            //View convertView 历史缓存对象
            if (convertView == null){
                tv = new TextView(MainActivity.this);
                Log.d(TAG, "创建ListView对象-" + position);//显示一个调用一次
            }else{
                tv = (TextView) convertView;
                Log.d(TAG, "复用ListView对象-" + position);//显示一个调用一次
            }
            Log.d(TAG, position + "");//显示一个调用一次
            //TextView tv = new TextView(MainActivity.this);
            tv.setText("权兴权意-" + position);
            return tv;
        }

接下来我们在布局文件中将他的高度改为包裹内容。

<span style="font-size:18px;">android:layout_height="wrap_content"</span>


运行,我们看一下输出结果:

说好的调用6次打印6遍,这都调用了多少次?




稍安勿躁,我们将高度改为填充,

<span style="font-size:18px;">        android:layout_height="match_parent"
</span>


运行,我们看一下输出结果:

说好的调用6次打印6遍,多一次少一次都不行。



下面是揭秘时间,到底是什么鬼?

现假设屏幕高度480,ListView的一条item高度48。

我们先看高度填充父控件(match),ListView可以很快计算出他可以加载几条内容,可不可以加载全。

因为480/48=10,所以不多不少调用6次getView。

那如果高度是包裹内容(wrap),ListView已经懵逼。

因为此时 ?/48=?,ListView必须多次校验才知道自己可以加载几条内容,可不可以加载全。

所以将调用多次getView。


小结:ListView小优化,控件高度最好设置为匹配父控件。


感慨:Android的优化有时很简单,仅仅就是一行代码的事。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值