GridView Adapter里的getView为啥会多次调用position 0

GridView Adapter里的getView为啥会多次调用position 0

一、问题描述

GridView Adapter里的getView方法总会调用很多次的position 0
日志
图中的GridView 包含9个大小相同的itemView,区别在于itemView中包含的textView中的文字不同。

二、问题分析

getView方法

既然是getView引起的,我们就先从这个方法本身入手,看看这里到底干了啥?
首先,我们知道

The Adapter provides access to the data items.
The Adapter is also responsible for making a View for each item in the data set.

那么getView呢?
顾名思义,就是得到一个View用来展示在数据集中特定位置的数据。所以我们需要再往上找,看看是它是怎么被调用的?

onMeasure方法

接下来,我们需要找的就是GridView,阅读GridView源码时,我们主要关注以下3个方法:onMeasure、onLayout、onDraw,那么我们先来看下onMeasure。

  • onMeasure是干啥的? 这里我们要追溯到View的measure方法:计算出一个view的大小,而它实际的计算工作是由它的子类重写onMeasure方法来实现。
  • 具体源码解析
  @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // Sets up mListPadding
        // MeasureSpec 是父View对子View大小的期望:包括测量模式、测量大小
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        // codes about measuring childWidth and child height

        mItemCount = mAdapter == null ? 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值