自定义BaseAdapter

来源:互联网 发布:mac如何恢复苹果系统 编辑:程序博客网 时间:2024/05/22 12:58

ArrayAdapter

最简单的Adapter,表项中只含有文本信息的情况

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ListView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/listview1">    </ListView></LinearLayout>

这里写图片描述

public class MyListViewActivity extends AppCompatActivity {    private ListView mListView;    private String []array={"1","2","3","4"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.listview);        ArrayAdapter<String> adapter=new ArrayAdapter(this,android.R.layout.activity_list_item,array);        mListView=(ListView)findViewById(R.id.listview1);        mListView.setAdapter(adapter);     }    }

SimpleAdapter

比ArrayAdapter复杂,每一个列表项中含有不同的子控件

XML文件相同可参见上下例
public class MyListViewActivity extends AppCompatActivity {    private ListView mListView;    private String []array={"1","2","3","4"};    private List <HashMap<String,String>>mData;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.listview);        // ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.activity_list_item,array);        mListView=(ListView)findViewById(R.id.listview1);       //LayoutInflater作用是将layout的xml布局文件实例化为View类对象。       // LayoutInflater inflater=getLayoutInflater();        initData();        SimpleAdapter adapter=new SimpleAdapter(this,mData,R.layout.list_simple_item,                new String[]{"name","age","sex","hobby"},new int[]{R.id.name,R.id.age,R.id.sex,R.id.hobby});        mListView.setAdapter(adapter);       //mListView.setOnItemLongClicListener();长按点击事件        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                HashMap<String,String>itemData=mData.get(position);                Log.d("data",""+itemData.get("name"));            }        });    }    public void initData(){        mData=new ArrayList();        HashMap<String,String>zhangsan=creatHashMap("张三","20","男","打篮球");        HashMap<String,String>lisi=creatHashMap("李四","20","男","吃");        HashMap<String,String>wangwu=creatHashMap("王五","20","男","玩");        HashMap<String,String>zhaoliu=creatHashMap("赵六","20","男","睡觉");    }    public HashMap<String,String>creatHashMap(String name,String age,String sex,String hobby){        HashMap<String,String>zhangsan=new HashMap<>();        zhangsan.put("name",name);        zhangsan.put("sge",age);        zhangsan.put("sex",sex);        zhangsan.put("hobby",hobby);        return zhangsan;    }}

SimpleCursorAdapter

把从数据库查出的数据适配给AdapterView

自定义Adapter(最重要最常用)

BaseAdapter5个方法

MVC模式

这里写图片描述
这里写图片描述

M是数据V是adapter中getview中的view C是listview
这里写图片描述

<?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">    <ImageView        android:id="@+id/img"        android:layout_width="100dp"        android:layout_height="100dp" />    <TextView        android:id="@+id/name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="姓名"        android:layout_margin="10dp"/>    <LinearLayout        android:orientation="vertical"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        >        <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="爱好"        android:layout_margin="10dp"/></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ListView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/listview1">    </ListView></LinearLayout>

这里写图片描述

StudentAdapter

public class StudentAdapter extends BaseAdapter {    private List<Student> mData ;    private LayoutInflater mInflater;    public StudentAdapter( LayoutInflater Inflater,List<Student> data){   //将inflater和数据传递到适配器        mInflater=Inflater;        mData=data;    }    @Override    public int getCount() {        //得到ListView将要显示的数据的条数        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) {        //LauoutInflater        View view=mInflater.inflate(R.layout.list_simple_item,null);        Student student=mData.get(position);        TextView name= (TextView) view.findViewById(R.id.name);        TextView age= (TextView) view.findViewById(R.id.age);        TextView sex= (TextView) view.findViewById(R.id.sex);        TextView hobby= (TextView) view.findViewById(R.id.hobby);        ImageView img=(ImageView)view.findViewById(R.id.img);        name.setText(student.getName());        age.setText(student.getAge());        sex.setText(student.getSex());        hobby.setText(student.getHobby());        img.setImageResource(student.getImg());        return view;    }}

MyBaseAdapterActivity

public class MyBaseAdapterActivity extends AppCompatActivity {    private ListView mListView;    private List<Student> mData;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.listview);        mListView=(ListView)findViewById(R.id.listview1);        //LayoutInflater作用是将layout的xml布局文件实例化为View类对象。        LayoutInflater inflater=getLayoutInflater();        initData();        StudentAdapter adapter=new StudentAdapter( inflater,mData);        mListView.setAdapter(adapter);    }    public void initData(){        mData=new ArrayList<>();        Student zhangsan=new Student("张三","21","男","打篮球",R.mipmap.baby);        Student lisi=new Student("张三","21","男","打篮球",R.mipmap.baby);        Student wangwu=new Student("张三","21","男","打篮球",R.mipmap.baby);        Student zhaoliu=new Student("张三","21","男","打篮球",R.mipmap.baby);        mData.add(zhangsan);        mData.add(lisi);        mData.add(wangwu);        mData.add(zhaoliu);    }}

Student

public class Student extends HashMap<String, String> {    private String name;    private  String sex;    private String age;    private String hobby;    private int img;    public Student(String name,String sex,String age, String hobby,int img){        this.name=name;        this.age=age;        this.sex=sex;        this.hobby=hobby;        this.img=img;    }    public int getImg() {        return img;    }    public void setImg(int img) {        this.img = img;    }    public String getHobby() {        return hobby;    }    public void setHobby(String hobby) {        this.hobby = hobby;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }}

结果如下
这里写图片描述

1 0