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

转载:http://www.lai18.com/content/1631131.html

自定义适配器时,需要重写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-10-22 17:14:31

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

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

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

自定义适配器视图getview实现方法比较

Android开发之中,listview是一个非常重要的组件,它以列表的形式显示用户的数据,用户可以自由的定义LsitView每一列的内容,样式,很多时候使用ListView都需要使用自定义Adapter,自定义Adapter之中最重要的莫过于getView方法了. getView方法实现主要的三种方法: 1.第一种就是每次都给adapter new一个View载入布局. 例如: public View getView(int position, View convertView, ViewGr

ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法

ListView使用的是自定义适配器,列表项的布局文件中含有文本和图标,实现文本区域和图标区域的点击事件. 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,分别设置文本区域和图标区域的OnClickListener,然后在activity界面中MyArrayAdapter实例实现这个接口. 1.listitem布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLa

ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法

如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String> 那么,如何实现适配器中的点击事件执行activity界面中的方法呢? 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,然后在activity界面中MyArrayAdapter实例实现这个接口. 较为完整的代码见上文. 1.MyArrayAdapter 关键代码 自定义接口和方法的代码如下: //列表项的单击事件监听接口 pub

自定义适配器

自定义适配器:productadapter.java 1 package com.tracesbility.adapter; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import com.tracesbility.traceabilitybind.R; 7 8 import android.content.Context; 9 import android.view.LayoutInflater; 10 import andr

Android自定义适配器和ListView的点击事件相结合的使用

下边演示一个使用ListView和自定义适配器的案例,点击ListView中的条目会出现一个对话框,进行成绩的修改,修改之后会立即通知适配器进行数据的重新加载,如下: (1).用于显示listView的布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andro

在Android中自定义适配器

啊喂,好久没更新博客了,唉唉,真是抱歉啊!求原谅! 1.自定义列表项适配器的主要方法是: ①public int getCount()=====>此方法用来控制列表项的个数 ②public View getView(int position, View convertView, ViewGroup parent)====>此方法用来控制页面 2.自定义适配器在实际开发中使用的非常灵活也非常广泛,因为,此方法一定要掌握.(虽然也有现成的适配器,但是在实际开发中使用不多) 3.在自定义适配器的过程

细解ListView之自定义适配器

下面我们将以一个例子来讲述ListView之自定义适配器 首先我们看一下效果图: [分析] 首先:需要创建一个ListView控件,自定义适配器是为了实现自定义ListView的ListView_Item,所以我们应该在创建一个Item 然后书写自定义适配器,自定义适配器的时候需要继承BaseAdapter,然后实现它的未实现的4个方法,然后在实现自定义适配器的构造方法,其构造方法的参数为山下文对象,数据源,必须实现的4个方法主要是对数据源进行过操作, 然后考虑优化方面,我们使用了ViewHol

安卓开发_浅谈ListView(自定义适配器)

ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ,实现图片文字混合列表 1 package com.example.work; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 7 8 import android.R.in