自定义的Adapter用法

   自定义Adapter 类步骤:

1、继承BaseAdapter

2、添加抽象方法:4个)

3、MyAdapter 需要的参数有两个:

(1)、List<PhoneInfo> lists ; 存放内容

(2)、Context 承接上下文

4、创建构造方法在构造方法中进行传递参数

 MyAdapter(List<PhoneInfo> lists,Context context){

 this.context = context;

 this.lists = lists;

}

5、重写四个抽象方法

(1)、int getCount() 返回的是集合的数量 一般: return lists.size();

(2)、Object getItem(int position) 返回当前的数据 一般return lists.get(position);

(3)、long getItemId(int position) 返回当前数据的ID 一般 return position;

(4)、重点  View getView(int position,View converView,ViewGroup parent)

返回的是一个view 同时把内容加载到视图当中

(1)、首先创建自定义的子View;ListView 中每一条View中显示的内容

(2)、在最外层创建布局文件 例如LinearLayout layout;

(3)、获取加载View的权限

LayoutInflater inflater = LayoutInflater.from(context);

(4)、通过layout对象进行加载

Layout =(LinearLayout) inflater.inflate(R.layout.call,null);

第一个参数是自定义的子View所在的XML文件

(5)、声明里面的组件 例如:

TextView name = (TextView) layout.findViewById(R.id.name);

TextView number= (TextView) layout.findViewById(R.id.number);

(6)、把内容添加进去 内容通过集合lists 来进行获取  例如:

name.setText(lists.get(position).getName());

number.setText(lists.get(position).getNumber());

    (7)、最后返回一个View    return layout;

 (5)、对View getView进行优化  利用 class ViewHolder

1、在ViewHolder类中创建需要用到的组件

2、在getView 方法中创建ViewHolder 对象

Private static class ViewHolder{

TextView name,number;

}

3、对converView 进行判断

      (1)、如果convertView 为空代表没有加载View 所以要加载view

通过convertView = LayoutInflater.from(context).inflate(R.layout.call,null);

 对holder进行实例化通过holder 加载组件和内容

   holder.name = (TextView)converView.findViewById(R.id.name);

   holder.number = (TextView)converView.findViewById(R.id.number);

              holder.name.setText(lists.get(position).getName());

              holder.name.setText(lists.get(position).getName());

            第一次加载完毕需要通过convertView.setTag(holder); 来把标签进行存储

   (2)、如果convertView不为空 代表它已经加载过 我们在向上滑的时候加载新的

         数据,我们不能再重新加载View 而是引用我们所存储的View通过

Holder = (VIewHolder)convertView.getTag();

   (3)、返回当前的View  return convertView;


public class MyAdapter extends BaseAdapter {
    //需要两个参数
    private List<PhoneInfo> lists; //存放内容
    private Context context;       //承接上下文
    private LinearLayout layout;

    MyAdapter(List<PhoneInfo> lists, Context context) {  //创建构造方法 在构造方法中进行传递参数
        this.context = context;
        this.lists = lists;
    }

    @Override
    public int getCount() {  //返回集合的数量
        return lists.size();
    }

    @Override
    public Object getItem(int position) { //返回当前的数据
        return lists.get(position);
    }

    @Override
    public long getItemId(int position) { //返回当前数据所在的ID
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) { //重点:返回一个View 同时把内容加载到视图当中
//        LayoutInflater inflater = LayoutInflater.from(context); 获取View的权限
//        layout=(LinearLayout)inflater.inflate(R.layout.call,null);
//        TextView nametv =(TextView) layout.findViewById(R.id.name);
//        TextView numbertv = (TextView) layout.findViewById(R.id.number);
//        nametv.setText(lists.get(position).getName());
//        numbertv.setText(lists.get(position).getNumber());

        //对View getView进行优化 利用class ViewHolder类
        ViewHolder holder;
        if (convertView == null) {  //对convertView进行判断 若为空代表没有加载View
            convertView = LayoutInflater.from(context).inflate(R.layout.call, null); //获取View的权限并加载XML布局文件
            holder = new ViewHolder();          //实例化ViewHolder 并加载组件和内容
            holder.nametv = (TextView) convertView.findViewById(R.id.name);
            holder.numbertv = (TextView) convertView.findViewById(R.id.number);
            holder.nametv.setText(lists.get(position).getName());
            holder.numbertv.setText(lists.get(position).getNumber());
            convertView.setTag(holder);           //第一次加载完毕 把标签进行存储

        } else {  //convertView 不为空  代表已经加载过  当我们向上滑时加载新的数据 我们不能重新加载View 而是要引用所存储的View
            holder = (ViewHolder) convertView.getTag();  //引用存储的View
            holder.nametv.setText(lists.get(position).getName());
            holder.numbertv.setText(lists.get(position).getNumber());
        }

        return convertView;
    }

    private static class ViewHolder { //在ViewHolder类中创建需要用到的组件
        TextView nametv;
        TextView numbertv;
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值