【Android个人理解(二)】从实现方法深入了解自定义适配器的工作过程

自定义适配器时,需要重写BaseAdapter的getCount(),getItem(int position),getItemId(int position),getView()方法。

但是由于不了解每个方法在工作时发挥的作用,而不知道如何重写四个方法。

1、由Adapter的工作原理了解getCount()和getView()的作用。

getCount()用来告诉系统Item的个数,也就是我们将要绘制的个数。因此我们如此重写这个方法:

public int getCount() {

return dataList.length;

}

但当我们在Gallery如此写的时候:

public int getCount() {

return Integer.MAX_VALUES;

}

再加入一些其他的设置,就会出现往复循环的效果即系统会认为我们要绘制2的31次方的Item。

getView()最重要而大家都已熟知,在此不再复述。

2、由上可知,getItem(int position)和getItemId(int position)在绘制View中不起到作用,那他们的作用是?

getItem(int position):

官方解释是Get the data item associated with the specified position in the data set.即获得相应数据集合中特定位置的数据项。那么该方法是在哪里被调用呢?什么时候被调用呢?

通过查看源代码发现,getItem方法不是在Baseadapter类中被调用的,而是在Adapterview中被调用的。

adapterView类中,我们发现getItem(position)在getItemAtPosition(int position)的构建方法中起作用,返回特定位置的数据项。如下:

public Object getItemAtPosition(int position) {

T adapter = getAdapter();

return (adapter == null || position < 0) ? null : adapter.getItem(position);

}

而getItemAtPosition的作用是在我们重写setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener时,可以调用此方法来获取当前行数据,所以不会被系统自动调取,只会由开发者在开发时方便调用。

综上所述:

getItem方法:获得相应数据集合中特定位置的数据项,主要实现getItemAtPosition(int position)方法。

getItemAtPosition(int position)方法:获取当前行数据,主要方便开发者在setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener编写时获取数据。

所以一般情况下,我们可以这样写:

public Object getItem(int position) {

return this.datalist.get(position);

}

getItemId(int position):

返回的是该postion对应item的id,同getItem一样,主要在含有id参数的OnClik方法中放回id的值。

所以一般情况下,我们可以这样写:

public long getItemId(int position) {

return position;

}

最后总结自定义适配器的步骤:

声明适配器连接的数据

根据各自的作用实现四个方法,其中在getView中返回View对象。

补充:

getView中convertView的含义是当ListView滑动的过程中 会有item被滑出屏幕 而不再被使用 这时候Android会回收这个条目的view 这个view也就是这里的convertView,作用是回收使用废弃的View对象,减少View对象的初始化的次数。因此我们常常:

public View getView(int position, View convertView, ViewGroup parent) {

View view = null;

if (convertView != null) {

view = convertView;

}

}

时间: 2024-12-23 18:25:39

【Android个人理解(二)】从实现方法深入了解自定义适配器的工作过程的相关文章

从实现方法深入了解自定义适配器的工作过程

转载:http://www.lai18.com/content/1631131.html 自定义适配器时,需要重写BaseAdapter的getCount(),getItem(int position),getItemId(int position),getView()方法. 但是由于不了解每个方法在工作时发挥的作用,而不知道如何重写四个方法. 1.由Adapter的工作原理了解getCount()和getView()的作用. getCount()用来告诉系统Item的个数,也就是我们将要绘制的

我的Android进阶之旅------&gt; Android在TextView中显示图片方法

面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包含图像的文本信息),并简要说明实现方法. 答案:Android SDK支持如下显示富文本信息的方式. 1.使用TextView组件可以显示富文本信息.在TextView组件中可以使用富文本标签来显示富文本信息,这种标签类似于HTML标签,但比HTML标签简单,支持有限的几种显示富文本的方式.如<font>标签用于设置字体和颜色,<b>用于设置粗体.包含这些标签的文本不能直接作为TextView.se

处女男学Android(十二)---Android 菜单(Menu)详解与应用

一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42170771 本篇blog将记录一下Android中菜单的使用方法,虽然在新版本中推荐使用ActionBar去替代菜单,但我认为菜单依然是挺不错的一种UI交互组件,比ActionBar好点一些,对于手指不灵活的人比起来ActionBar右上角的那个方块小按钮,或许ta会更喜欢Menu呢,废话不多说,下面就具体介绍一下Android中关于Menu的使用方法. 二.创建第一

android中获取root权限的方法以及原理(转)

一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有掌控手机系统的权限,比如删除一些system/app下面的无用软件,更换开关机铃声和动画,拦截状态栏弹出的广告等. 2. Root的原理介绍 谷歌的android系统管理员用户就叫做root,该帐户拥有整个系统至高无上的权利,它可以访问和修改你手机几乎所有的文件,只有root才具备最高级别的管理权限

Android应用插件式开发解决方法[转]

一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大,用户在使用过程中也没有办法选择性的加载自己需要的功能模块.此时可能就需要考虑如何分拆整个应用了. 二.解决方案提出 一般有两种方式,一种是将应用按照功能分拆成多个应用,用户需要哪个就下载哪个,都需要就都下载.应用之间,可以在代码层面做一定的关联,以共享部分信息.另一种方式,类似于其他平台插件的方式,用户可以在主应用中可以选择性的下载需要的插件,不需要该功能,则不需要下载. 第一种

Android 面试题总结之Android 进阶(二)

Android 之美 从0到1 之Android 进阶(二) 在上一章节中<Android 之美 从0到1 之Android 进阶(一)>中我们已经理解了一些View的基本知识并且知道如何自定义View.那么本章节将继续深入理解View,关于View的绘制流程,View的事件分发.刷新机制等等. 在阅读过程中有任何问题,请及时联系.如需转载请注明 fuchenxuan blog 本章系<Android 之美 从0到1 – 高手之路>Android 深入理解View的绘制流程. An

Android 基础 十二 Bitmap的加载和Cache

本章的主题是Bitmap的加载和Cache,主要包含三个方面的内容.首先讲述如何有效地加载一个Bitmap,这是一个很有意义的话题,由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16MB,这导致Bitmap加载的时候很容易出现内存溢出.下面这个异常信息在开发中应该经常遇到: 因此如何高效的加载Bitmap是一个很重要也很容易被开发者或忽视的问题. 接着介绍Android中常用的缓存策略,缓存策略是一种通用的思想,可以用在很多场景中,但是实际开发中经常需要用Bitmap

【转】Android与JNI(二) -- 不错

原文网址:http://www.cnblogs.com/eddy-he/archive/2012/08/09/2629974.html 软件版本: ubuntu10.04 java version "1.6.0_30-ea" eclipse android-ndk-r5b 目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI(一)已经简单介绍

Android学习Scroller(二)——ViewGroup调用scrollTo()

MainActivity如下: package cc.ac; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.app.Activity; /** * Demo描述: * 对ViewGroup调用sc