Android UI设计:ListView适配器——ArrayAdapter、SimpleAdapter与BaseAdapter

AdapterView:用于显示多条数据采用MVC模式

ArrayAdapter

ArrayAdapter中只能放置同一种类型的元素
1、先在layout中创建ListView 控件
2、在Activity中获得ListView 并创建ArrayAdapter<>适配器,放入String类型的值。
1、Layout:

<RelativeLayout 

xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" 

android:layout_width="match_parent"
    android:layout_height="match_parent" 

android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"


tools:context="com.kongjian.administrator.mykongjian.MyListview

">

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

</RelativeLayout>

2、Activity:

package com.kongjian.administrator.mykongjian;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MyListview extends Activity {
    private ListView mlistview;
    private String[] array={"张三","李四","王五","赵六"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_listview);
        mlistview= (ListView) findViewById(R.id.listview);
        ArrayAdapter<String> adapter=new ArrayAdapter<String>

(this,android.R.layout.simple_list_item_1,array);
        mlistview.setAdapter(adapter);

    }


}

补充:
自己建的xml:
ctrl+点击simple_list_item_1,进入到simple_list_item_1.xml中复制

TextView 中的代码。在layout下新建xml文件,复制后进行修改。
下面代码在原有基础上增加了一条语句:

android:textColor="#ff0000"

代码:

<TextView 

xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?
android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:textColor="#ff0000"
    android:minHeight="?
android:attr/listPreferredItemHeightSmall" />SimpleAdapter

在调用时还需要修改Activity中的代码

    ArrayAdapter<String> adapter=new ArrayAdapter<String>

(this,R.layout.mylistviewtext,array);

这里写图片描述

SimpleAdapter

使用方法:
1、进行布局
2、获得ListView,创建SimpleAdapter,根据SimpleAdapter中要传递的数据创建List<HashMap<String,String>>对数据进行初始化即写initData()方法。

1、布局
名字  年龄   爱好
   性别

<?xml version="1.0" encoding="utf-8"?>
<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_gravity="center_vertical"
    android:layout_margin="15dp">
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="名字"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="年龄"/>

        <TextView
            android:id="@+id/sex"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="性别"/>

    </LinearLayout>
    <TextView
        android:id="@+id/hobby"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="爱好"
        />
</LinearLayout>

调用:

package com.kongjian.administrator.mykongjian;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

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

public class MyListview extends Activity {
    private ListView mlistview;
    private List<HashMap<String,String>> mdata;
//    private String[] array={"张三","李四","王五","赵六"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_listview);

       mlistview= (ListView) findViewById(R.id.listview);
       initData();
        SimpleAdapter adapter=new SimpleAdapter

(this,mdata,R.layout.item_simpleadapter,new String[]

{"name","age","sex","hobby"},new int[]

{R.id.name,R.id.age,R.id.sex,R.id.hobby});
        mlistview.setAdapter(adapter);

    }

    private void initData() {

        mdata=new ArrayList<>();
        HashMap<String,String> zhangsan= createHashmap("张

三","20","男","爱好打篮球");
        HashMap<String,String> lisi= createHashmap("张

三","20","男","爱好打篮球");
        HashMap<String,String> wangwu= createHashmap("王

五","20","男","爱好打篮球");
        HashMap<String,String> zhaoliu= createHashmap("赵

六","20","男","爱好打篮球");
        mdata.add(zhangsan);
        mdata.add(wangwu);
        mdata.add(lisi);
        mdata.add(zhaoliu);

    }

    private HashMap<String, String> createHashmap(String 

name,String age,String sex,String hobby) {
       HashMap<String,String> zhangsan=new HashMap<>();
        zhangsan.put("name",name);
        zhangsan.put("age",age);
        zhangsan.put("sex",sex);
        zhangsan.put("hobby",hobby);

        return zhangsan;
    }


}

BaseAdapter

MVC全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。

  通常模型对象负责在数据库中存取数据

View(视图)是应用程序中处理数据显示的部分。

  通常视图是依据模型数据创建的。
  
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

1、创建List中自己需要的泛型Student类

package com.item.list;

/**
 * Created by Administrator on 2015/8/24.
 */
public class Student {
    private String name;
    private String age;
    private String sex;
    private String hobby;
    private int img;
    //为添加数据方便,重载构造器
    public Student(String name,String age,String sex,String hobby,  int img){
        this.name=name;
        this.age=age;
        this.sex=sex;
        this.hobby=hobby;
        this.img=img;
    }

    public String getHobby() {
        return hobby;
    }

    public int getImg() {
        return img;
    }
    public void setImg(int img) {
        this.img = img;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    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;
    }
}

2、布局:

<?xml version="1.0" encoding="utf-8"?>
<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_gravity="center_vertical"
    android:layout_margin="15dp">
    <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="名字"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="年龄"/>

        <TextView
            android:id="@+id/sex"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="性别"/>

    </LinearLayout>
    <TextView
        android:id="@+id/hobby"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="爱好"
        />
</LinearLayout>

3、创建Studentadapter
在getView()方法中通过调用minflater中的inflater()方法(inflater()方法中传递要显示的layout和null)获得view对象,通过view.findViewById()找到相应要得到的ImageView或是TextView,并对其中的图片或文件进行设置

package com.kongjian.administrator.mykongjian.Adapter;


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 com.item.list.Student;
import com.kongjian.administrator.mykongjian.R;

import java.util.List;

/**
 * Created by Administrator on 2015/8/24.
 */
public class Studentadapter extends BaseAdapter {
    private List<Student> mData;
    private LayoutInflater minflater;
    //minflater作用只有一点,就是将layout转化成View对象
   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 parent) {
        View view=minflater.inflate(R.layout.item_simpleadapter,null);
        Student student=mData.get(position);
        ImageView img= (ImageView) view.findViewById(R.id.image_view);
        TextView textview_name= (TextView) view.findViewById(R.id.name);
        TextView textview_age= (TextView) view.findViewById(R.id.age);
        TextView textview_sex= (TextView) view.findViewById(R.id.sex);
        TextView textview_hobby= (TextView) view.findViewById(R.id.hobby);
        img.setImageResource(student.getImg());
        textview_name.setText(student.getName());
        textview_age.setText(student.getAge());
        textview_sex.setText(student.getSex());
        textview_hobby.setText(student.getHobby());
        return view;
    }
}

4、Activity中调用
获得ListView,创建以Student为泛型的List,对数据进行初始化,放入List当中,创建StudentAdapter适配器,再进行调用。

package com.kongjian.administrator.mykongjian;

import android.app.Activity;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.item.list.Student;
import com.kongjian.administrator.mykongjian.Adapter.Studentadapter;

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

public class MyListview extends Activity {
    private ListView mlistview;
    public  List<Student> mData;
    public LayoutInflater minflater;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_listview);
        mlistview= (ListView) findViewById(R.id.listview);
         minflater=getLayoutInflater();
        initStudent();
        Studentadapter adapter=new Studentadapter(minflater,mData);
        mlistview.setAdapter(adapter);
    }

    private void initStudent() {
        mData=new ArrayList<Student>();
        Student zhaoliying=new Student("赵丽颖","20","女","爱好吃",R.mipmap.zly);
        Student zhangziyi=new Student("章子怡","21","女","爱好表演",R.mipmap.zzy);
        Student zhaoli=new Student("赵丽颖","20","女","爱好吃",R.mipmap.zly);
        Student zhangzyi=new Student("章子怡","21","女","爱好表演",R.mipmap.zzy);
        Student zhaoliing=new Student("赵丽颖","20","女","爱好吃",R.mipmap.zly);
        Student zhaniyi=new Student("章子怡","21","女","爱好表演",R.mipmap.zzy);
        Student zhaoiying=new Student("赵丽颖","20","女","爱好吃",R.mipmap.zly);
        Student zhangyi=new Student("章子怡","21","女","爱好表演",R.mipmap.zzy);
        mData.add(zhaoliying);
        mData.add(zhangziyi);
        mData.add(zhaoli);
        mData.add(zhangzyi);
        mData.add(zhaoliing);
        mData.add(zhaniyi);
        mData.add(zhaoiying);
        mData.add(zhangyi);
    }

}

这里写图片描述

补充ItemClick

在ListView中只能调用setOnItemClickListener不能调用setOnClickListener方法。

     mlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Student data=mData.get(position);
                Log.d("item",data.getName()+data.getAge()+data.getSex()+data.getHobby());
            }
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值