BaseAdapter的使用

1.什么是数据适配器BaseAdapter

数据的来源是各种各样的,ListView所展示的数据格式却是有一定要求的,数据适配器建立了数据源与ListView之间的适配关系,将数据源的数据转换为ListView能展示的数据格式

2.BaseAdapter基本结构

//返回适配器中数据集中数据的个数

public int getCount() {

    return0;
}
//获取数据集中与指定索引对应的数据项
public Object getItem(intposition) {
    return null;
}
//获取指定行对应的ID
public long getItemId(intposition) {
    return 0;
}
//获取每一个Item的显示内容
public View getView(intposition, View convertView, ViewGroup parent) {
    return null;
}

3.使用ViewHolder优化BaseAdapter思路

1.创建Bean对象 用于封装数据

2.在构造方法中初始化用于映射的数据List

3.创建ViewHolder类,创建布局映射关系

4.判断convertView,为空则创建,并设置tag,否则通过tag来取出ViewHolder

5.给ViewHolder中的控件设置数据

IteamBean类:

package com.example.lenovo.baseadapter;

/**
 * Created by lenovo on 2018/1/19.
 */
/*,每一个Beand对象对应ListView中的一条数据*/
public class ItemBean {
    public int ItemImageResid;
    public String ItemTitle;
    public String ItemContent;

    public ItemBean(int itemImageResid,String itemTitle,String itemContent ){
        ItemImageResid=itemImageResid;
        ItemTitle=itemTitle;
        ItemContent=itemContent;

    }
}

MyAdapter类;

package com.example.lenovo.baseadapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by lenovo on 2018/1/22.
 */

public class MyAdapter extends BaseAdapter {

    private List<ItemBean>  mList;
    //使用LayoutInflater方法将一个xml文件转化成一个view布局
    private LayoutInflater mInflater;
    //通过构造方法将数据源与数据适配器相关联
    public  MyAdapter(Context context, List<ItemBean> list){
        mList=list;
        mInflater=LayoutInflater.from(context);
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        //充分利用ListView缓存机制,避免重复创建convertView
        if(convertView==null){//为空:View未被实例化,缓存池中无缓存
            viewHolder=new ViewHolder();
            convertView=mInflater.inflate(R.layout.item,null);
            viewHolder.imageView=convertView.findViewById(R.id.image);
            viewHolder.title=convertView.findViewById(R.id.title);
            viewHolder.content=convertView.findViewById(R.id.content);
            //通过setTag将ViewHolder与convertView绑定
            convertView.setTag(viewHolder);
        }else {
            viewHolder= (ViewHolder) convertView.getTag();//取出关联的ViewHolder
        }
        //对控件赋值
        ItemBean bean=mList.get(position);
        viewHolder.imageView.setImageResource(bean.ItemImageResid);
        viewHolder.title.setText(bean.ItemTitle);
        viewHolder.content.setText(bean.ItemContent);
        return convertView;
    }
    //创建内部类ViewHolder,目的:避免重复的findViewbyId
    class ViewHolder{
        public  ImageView imageView;
        public  TextView  title;
        public  TextView  content;

    }
}

MainActivity类:

package com.example.lenovo.baseadapter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        List<ItemBean> itemBeanList=new ArrayList<>();
        for(int i=0;i<20;i++){
            itemBeanList.add(new ItemBean(R.drawable.ic_launcher_background,"我是标题"+i,"我是内容"+i));

        }
        //建立ListView与Adapter之间的联系
        ListView listView=findViewById(R.id.main);
        listView.setAdapter(new MyAdapter(this,itemBeanList));
    }
}
xml文件:

activity_main:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.lenovo.baseadapter.MainActivity">

<ListView
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</ListView>

</RelativeLayout>
item:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/image"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@drawable/ic_launcher_background"/>
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_toEndOf="@+id/image"
        android:layout_toRightOf="@+id/image"
        android:text="Title"
        android:gravity="center"
        android:textSize="25sp"
        />
    <TextView
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_toEndOf="@+id/image"
        android:layout_toRightOf="@+id/image"
        android:layout_below="@+id/title"
        android:text="Content"
        android:gravity="center_vertical"
        android:textSize="20sp"
        />
</RelativeLayout>
效果图:

猜你喜欢

转载自blog.csdn.net/xushunag/article/details/79141776