Android UI设计——ListView控件和自定义Adapter(四)

自定义Adapter

  这个是ListView中使用最多的一个Adapter适配器,因为我们可以根据自己的意愿去创建数据和数据的布局样式。使用方式灵活,下面我们来学习一下自定义Adapter的具体步骤:
  
One.自定义的Adapter依然遵循MVC设计模式,首先我们来创建数据Model。
  创建一个学生类:

public class Student {

    /*
    定义学生的构造器,创建学生对象时定义学生的信息。
     */
    public Student(String name, String age, String sex, String hobby,int imag){
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.hobby = hobby;
        this.imag = imag;

    }
    private int imag;  //学生照片
    private String name;//学生姓名
    private String age;//学生年龄
    private String sex;//学生性别
    private String hobby;//学生爱好

    public int getImag() {
        return imag;
    }
    public void setImag(int imag) {
        this.imag = imag;
    }

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

    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
}

Two. 定义数据的布局方式,也就是数据的View。

在这里我们定义他的布局方式如下图:

这里写图片描述

  布局前段时间添加的是错的,多谢@java小酱油啊 小伙伴提醒哦,已修改……

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="20dp"
    android:gravity="center|left">

    <ImageView
        android:id="@+id/image_photo"
        android:layout_width="70dp"
        android:layout_height="70dp" />
    <TextView
        android:id="@+id/textview_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="姓名"
        android:textStyle="bold"
        android:textColor="#0e99ff"
        android:textSize="20sp" />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginRight="15dp"
        android:layout_marginLeft="15dp">

        <TextView
            android:id="@+id/textview_age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="性别"
            android:textStyle="bold"
            android:textColor="#009900"
            android:textSize="15sp"/>
        <TextView
            android:id="@+id/textview_sex"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="年龄"
            android:textStyle="bold"
            android:textColor="#ff99ff"
            android:textSize="15sp" />
    </LinearLayout>
    <TextView
        android:id="@+id/textview_hobby"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="爱好"
        android:textStyle="bold"
        android:textColor="#55eedd"
        android:textSize="20sp" />
</LinearLayout>

Three.自定义Adapter,创建一个类继承BaseAdapter。因为BaseAdapter中有四个抽象的方法:public int getCount()public Object getItem(int position)public long getItemId(int position)public View getView(int position, View convertview,ViewGroup viewGroup),因此在继承BaseAdapter类后必须实现这四个方法。

public int getCount()
  是用来返回数据的数量的。
  
public Object getItem(int position):
  该方法使用来获得每一条ListView中的Item的,这里我们返回position即可,position是指每条Item在ListView中的位置(0, 1, 2……)。
  
public long getItemId(int position)
   该方法是来获得ListView中每条Item的Id的,这里我们依然返回position即可。

public View getView(int position, View convertview, ViewGroup viewGroup):
  该方法是自定义Adapter最重要的方法,在这个方法中我们需要将数据一一对应的映射或者添加到我们自己定义的View中。然后返回view。

public class StudentAdapter extends BaseAdapter{

    private List<Student> mData;//定义数据。
    private LayoutInflater mInflater;//定义Inflater,加载我们自定义的布局。

    /*
    定义构造器,在Activity创建对象Adapter的时候将数据data和Inflater传入自定义的Adapter中进行处理。
    */
    public StudentAdapter(LayoutInflater inflater,List<Student> data){
        mInflater = inflater;
        mData = data;
    }

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

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

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

    @Override
    public View getView(int position, View convertview, ViewGroup viewGroup) {
        //获得ListView中的view
        View viewStudent = mInflater.inflate(R.layout.item_simpleadapter,null);
        //获得学生对象
        Student student = mData.get(position);
        //获得自定义布局中每一个控件的对象。
        ImageView imagePhoto = (ImageView) viewStudent.findViewById(R.id.image_photo);
        TextView name = (TextView) viewStudent.findViewById(R.id.textview_name);
        TextView age = (TextView) viewStudent.findViewById(R.id.textview_age);
        TextView sex = (TextView) viewStudent.findViewById(R.id.textview_sex);
        TextView hobby = (TextView) viewStudent.findViewById(R.id.textview_hobby);
        //将数据一一添加到自定义的布局中。
        imagePhoto.setImageResource(student.getImag());
        name.setText(student.getName());
        age.setText(student.getAge());
        sex.setText(student.getSex());
        hobby.setText(student.getHobby());
         return viewStudent ;
    }
}

Four:在Activity中初始化数据,然后创建自定义的Adapter的对象,通过setAdapter()方法将自定义的布局加载到ListView中。

public class BaseAdapterActivity extends Activity {

    //定义数据
    private List<Student> mData;
    //定义ListView对象
    private ListView mListViewArray;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        //为ListView对象赋值
        mListViewArray = (ListView) findViewById(R.id.listview_array);
        LayoutInflater inflater =getLayoutInflater();
        //初始化数据
        initData();
        //创建自定义Adapter的对象
        StudentAdapter adapter = new StudentAdapter(inflater,mData);
        //将布局添加到ListView中
        mListViewArray.setAdapter(adapter);

    }

    /*
    初始化数据
     */
    private void initData() {
        mData = new ArrayList<Student>();
        Student zhangsan  = new Student("张三", "30", "男", "喜欢玩游戏",R.mipmap.header_icon );
        Student lisi  = new Student("李四", "18", "女", "喜欢读书",R.mipmap.header_icon );
        Student wangwu  = new Student("王五", "25", "男", "喜欢运动",R.mipmap.header_icon );
        Student zhaoliu  = new Student("赵六", "22", "男", "喜欢吃饭",R.mipmap.header_icon );
        mData.add(zhangsan);
        mData.add(lisi);
        mData.add(wangwu);
        mData.add(zhaoliu);
    }

}

结果显示为:(练习使用请不要嫌我做的丑好咩……)

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小_爽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值