关于BaseAdapter在listView中的使用

使用BaseAdapter首先要重写里面的四个方法:

public int getCount()  

//你的item的个数,也就是你需要展示的listView的列数。一般直接返回一个容器的size()

public Object getItem(int position)

//返回每个Item的数据

public long getItemId(int position)

//返回每个Item的ID,一般直接返回position

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

//最重要的是:重绘视图,调用次数是由第一个方法确定的。最后将视图返回。

里面的参数 position是当前item的id,convertView是当前item的布局。

注意:有些控件必须设置成没有获利焦点与点击。

缓存处理:

如果listView过长当翻页时每次都需要重新加载控件这样十分浪费内存,就需要做缓存处理,通常的方法是写一个内部类的方式ViewHolder 用来储存已经加载过的控件。

public class PersonAdapter extends BaseAdapter {
    private List<Person> persons;
    private Context context;

    public PersonAdapter(List<Person> persons, Context context) {
        super();
        this.persons = persons;
        this.context = context;
    }

    @Override
    public int getCount() {
        return persons.size();
    }

    @Override
    public Object getItem(int position) {
        return persons.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            /**
             * 获取布局
             */
            convertView = View.inflate(context, R.layout.avtivity_item, null);

            //通过holder找到控件
            holder.name = (TextView) convertView.findViewById(R.id.item_textView_name);
            holder.age = (TextView) convertView.findViewById(R.id.item_textView_age);
            holder.button = (Button) convertView.findViewById(R.id.item_button);

            //设置tag
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        //设置空间属性
        holder.name.setText(persons.get(position).getName());
        holder.age.setText(""+persons.get(position).getAge());

        return convertView;
    }

    class ViewHolder {
        public TextView name;
        public TextView age;
        public Button button;
    }
}
时间: 2024-07-28 12:25:24

关于BaseAdapter在listView中的使用的相关文章

Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的.而(Spinner,ListView,GridView)都有自己的适配器(记起来麻烦).但是BaseAdapter(一招鲜)对他们来说却是通用的,为什么这么说呢,首先我们看一下API文档: 我们看一下BaseAdapter已经实现了ListAdapter和SpinnerAdapter的接口,而GridView的适配器是实现了List

ImageLoader在Listview中的使用

图片加载框架之ImageLoader 1_特点 1)多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 2)支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置 3)支持图片的内存缓存,文件系统缓存或者SD卡缓存 4)支持图片下载过程的监听 5)根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存 6)较好的控制图片的加载过程,例如暂停图片加载,重

Android ListView使用BaseAdapter与ListView的优化 (转至 http://www.open-open.com/lib/view/open1339485728006.html)

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖.这时候最方便的方法就是使用灵活的适配器BaseAdapter了. ▲图4-35 BaseAdapter中的方法 使用BaseAdapter必须写一

Android开发之ListView中Adapter的优化

ListView是Android开发最常用的控件,适配器adapter是将要显示的数据映射到View中并添加到ListView中显示 在实现ListView时,我们需要定义适配器如BaseAdapter.ArrayAdapter.CursorAdapter.SimpleAdapter等,并且重写其一下四个方法: 1 public int getCount(): 2 public Object getItem(int position) 3  public long getItemId(int p

Android ListView使用BaseAdapter与ListView的优化

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖.这时候最方便的方法就是使用灵活的适配器BaseAdapter了. ▲图4-35 BaseAdapter中的方法 使用BaseAdapter必须写一

android 自定义adapter和线程结合 + ListView中按钮滑动后状态丢失解决办法

adapter+线程 1.很多时候自定义adapter的数据都是来源于服务器的,所以在获取服务器的时候就需要异步获取,这里就需要开线程了(线程池)去获取服务器的数据了.但这样有的时候adapter的中没有数据. 如下面的代码: 这就是在initData中异步获取服务器的数据,然后实例化adatper,再将adapter赋给listView. 2.initData()中的代码是: 这里线程要睡眠5秒钟,是为了模仿网络的耗时操作 3.Handler: 在Handler中接收到数据后给list赋值后,

Android 如何在 ListView 中更新 ProgressBar 进度

=======================ListView原理============================== Android 的 ListView 的原理打个简单的比喻就是: 演员演小品(假设演员都长一样,每个角色任何演员都可以演) 小品剧也不会为每个角色都招募一个演员.ListView 不会为每一个 Item 创建 View 对象. 小品剧的演员在一个角色表演完成后,会在后台换下一个角色的服装,等待需要表演的时候再出场. ListView 会让未显示的 View 填充数据后缓

简单的ListView中item图片异步加载

前言: 在android开发当中,从目标地址获取图片往往都是采用异步加载的方法.当完全加载完图片后在进行显示,也有些是直接将加载的图片一点一点的显示出来. 这两个区别只是对流的处理不同而已.现在就讲讲当图片被完全获取到后在显示的方法. 一,效果图:       初始化:                                                   获取后:                         1.1,效果思路: 初始化的时候默认ImageView显示一张白色的图

ListView中使用ImageLoader框架下载网络图片显示

首先,ListView中如何下载文字和图片,大家可以看看本人之前的blog ListView获取网络数据显示. 所以这里关于首次如何下载xml数据,绑定适配器等就不更详细有了,主要是分享如何在ListView中使用ImageLoader这个开源框架如下载图片. 首先介绍一下ImageLoader.用户在快速拖动的时候容易出现卡顿的现象,可能下载不及时完全,然后有时候会可能出现显示错误的item的ImageView等问题,使用开源框架ImageLoader就可以较好的控制这个问题. 首先,使用Im