164950960.jpg

Adatper是什么呢? 说白了就是连接activity和数据端的桥梁。关于Adapter有很多种,比如SimpleAdapter,ArrayAdapter等等,但是大部分时候这些adapter不能满足我们开发的需求。所以在这时候,自定adapter就起到了重要的作用,给我们带来很大的方便。闲话少说,直奔主题:如何使用自定义的Adapter

   

package cn.adapter;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import cn.bean.NewsInfos;
import cn.internetdata.R;
/**
 * 自定义adapter的使用
 *
 * @author YSY
 */
// 1。首先创建一个类,来继承BaseAdapter,从而成为一个adapter
public class MyAdapter extends BaseAdapter
{
    Context context;
    List<NewsInfos> newsInfos;
    // 重写其构造方法,里面有两个参数Context,List<E> 下面的部分方法中会用到
    public MyAdapter(Context context, List<NewsInfos> newsInfos)
    {
        this.context = context;
        this.newsInfos = newsInfos;
    }
    // 2.添加未实现的方法getCount(), getItem(int position),getItemId(int
    // position),getView(int position, View convertView, ViewGroup parent)
    public int getCount()
    {
        return newsInfos.size();
    }
    @Override
    public Object getItem(int position)
    {
        return newsInfos.get(position);
    }
    @Override
    public long getItemId(int position)
    {
        return position;
    }
    // 此方法最为重要 返回的对象是一个View
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        Holder holder = null;
        // 为了节省资源,当子View充满手机一屏的话,后面的数据就会加载到第一屏的view上
        if (convertView == null)
        {
            // 把一个xml文件转换成一个View
            convertView = View.inflate(context, R.layout.activity_item, null);
            // 创建一个Holder对象,用来存放holder中定义的各个属性
            holder = new Holder();
            // 在View中寻找各个控件对象
            holder.title = (TextView) convertView.findViewById(R.id.tv_title);
            holder.date = (TextView) convertView.findViewById(R.id.tv_date);
            // 把holder对象保存在View中
            convertView.setTag(holder);
        } else
        {
            // 直接冲View中取出holder即可
            holder = (Holder) convertView.getTag();
        }
        // 为holder中的各个对象赋值
        holder.title.setText(newsInfos.get(position).getNewstitle());
        holder.date.setText(newsInfos.get(position).getCreateDate());
        return convertView;
    }
    // 创建一个类,来存放各个控件的对象
    private class Holder
    {
        public TextView title;
        public TextView date;
    }
}


在activity端为View控件设置数据的时候,一般都会用到adapter,进一步说都要view.setAdapter(adapter);


activity端

view.setAdapter(new MyAdapter());

在上面代码中的 R.layout.activity_item是自定义的一个xm布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="标题"
        android:textColor="#ff000000"
        android:textSize="23sp" />
    <TextView
        android:id="@+id/tv_date"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="时间"
        android:textColor="#ff000000"
        android:textSize="23sp" />
</LinearLayout>

其中还可以加入图片,视屏控件,根据自己需要,添加相应的控件即可