ArrayAdapter的使用

ArrayAdapter的使用方法

  • ArrayAdapter的简单使用
  • 继承ArrayAdapter

ArrayAdapter的简单使用

首先看一下ArrayAdapter的六个构造函数:

  1. ArrayAdapter(Context context, int resource);
  2. ArrayAdapter(Context context, int resource, int textViewResourceId);
  3. ArrayAdapter(Context context, int resource, T[] objects);
  4. ArrayAdapter(Context context, int resource, List objects);
  5. ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects);
  6. ArrayAdapter(Context context, int resource, int textViewResourceId, List objects);

对于 1. 的构造方法的使用是:

ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this,R.layout.list_only_item);
adapter.add(new Student("tiantian", 28));
adapter.add(new Student("xiangshang", 43));
adapter.add(new Student("chongji", 30));
list.setAdapter(adapter);

这里的list_item布局里面只能有一个TextView; 如果你还有其他东西,那么就得使用构造器2了

ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this,R.layout.list_item, R.id.name);
adatper.addAll(studentArray);
list.setAdapter(adapter);

R.id.name,是list_item中的一个控件且必须是TextView, 如果你觉得添加数据比较麻烦也可以使用下面的3, 4, 5, 6 构造函数,直接将一个容器传入进去 ArrayAdapter有一套这样的操作:adatper.add(student), adatper.addAll(studentArray), adatper.addAll(studentList) adatper.remove(student), adatper.insert(student index), adatper.clear()

直接使用原来的构造器这种写法比较简单,但是缺点是,布局中至少包含一个TextView,而且你传入进去的类要实现toString()方法(它将toString的返回值设置给TextView) 如果你使用的是构造器2那么你在R.layout.list_item 上写的其他控件没办法为它们设值,只能显示固定数据,比如ImageView只能显示一张固定的照片,没办法像继承BaseAdapter一样在getView中进行设置那我们就继承

继承ArrayAdapter

为了使得ArrayAdapter使用更加灵活,我们可以继承ArrayAdapter实现自己的Adapter

首先我们定义了一个Student类:

 class Student{

    private int avatar;
    private String name;
    private boolean attend;


    public Student(int avatar, String name, boolean attend) {
        this.avatar = avatar;
        this.name = name;
        this.attend = attend;
    }

    public int getAvatar() {
        return avatar;
    }

    public void setAvatar(int avatar) {
        this.avatar = avatar;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isAttend() {
        return attend;
    }

    public void setAttend(boolean attend) {
        this.attend = attend;
    }

}

接下来是我们的继承实现自己的MyAdapter

class MyAdapater extends ArrayAdapter<Student>{

    private LayoutInflater inflater;

    private void initeLayoutInflater(Context context){
        inflater = LayoutInflater.from(context);
    }
    public MyAdapater(Context context) {
        super(context, 0);
        initeLayoutInflater(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;
        if(convertView == null){

            convertView = inflater.inflate(R.layout.listview_item, null);
            holder = new ViewHolder();
            holder.imageView = (ImageView)convertView.findViewById(R.id.avatar);
            holder.name = (TextView)convertView.findViewById(R.id.name);
            holder.attend = (CheckBox)convertView.findViewById(R.id.attend);
            convertView.setTag(holder);
        }
        holder = (ViewHolder)convertView.getTag();

        holder.imageView.setImageResource(getItem(position).getAvatar());
        holder.name.setText(getItem(position).getName());
        holder.attend.setChecked(getItem(position).isAttend());

        return convertView;

    }

    class ViewHolder{

        ImageView imageView;

        TextView name;

        CheckBox attend;

    }
}

好了核心代码: adapter.addAll(getListData()); listView.setAdapter(adapter);

getListData() 返回一个装着Student实例的List 自己实现吧! 而且这里Student不需要实现toString方法, ArrayAdapter默认背后有一个ArrayList存储数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值