自定义Adapter实现列表功能
最后的效果图就是这样的,其实这个效果的话用SimpleAdapter也是可以实现的,但是为了学习自定义adapter还是重新写了一个。
首先我们应该有每一个列表项布局的xml文件
1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="wrap_content" >
5
6
7
8 <TextView
9 android:id="@+id/tv_2"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 android:layout_toRightOf="@+id/tv_1"
13 android:layout_centerVertical="true"
14 android:layout_marginLeft="40dip"
15 android:textSize="20sp"
16 android:text="我是签名" />
17
18 <TextView
19 android:id="@+id/tv_1"
20 android:layout_width="wrap_content"
21 android:layout_height="wrap_content"
22 android:layout_toRightOf="@+id/iv"
23 android:layout_centerVertical="true"
24 android:layout_marginLeft="20dip"
25 android:textSize="15sp"
26 android:textColor="#9d0f31"
27 android:text="我是名字" />
28
29 <ImageView
30 android:id="@+id/iv"
31 android:layout_width="80dip"
32 android:layout_height="80dip"
33 android:src="@drawable/ic_launcher" />
34
35 </RelativeLayout>
还要有一个只有listviwe的xml文件
1 <ListView xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:id="@+id/lv"
6 >
7
8
9
10 </ListView>
好了这时候我们就要新写一个adapter来继承我们的BaseAdapter
1 package com.example.listviewwx2;
2
3 import java.util.List;
4
5 import com.example.listviewwx2.bean.FriendBean;
6
7 import android.content.Context;
8 import android.view.View;
9 import android.view.ViewGroup;
10 import android.widget.BaseAdapter;
11 import android.widget.ImageView;
12 import android.widget.SimpleAdapter;
13 import android.widget.TextView;
14
15 public class FriendAdapter extends BaseAdapter {
16
17 private List<FriendBean> data;// 传进来数据这是必须的
18 private Context context;// 这个是上下文,为了让里面的控件有获得资源的能力
19
20 public FriendAdapter(List<FriendBean> data, Context context) {
21 this.data = data;
22 this.context = context;
23
24 }
25
26 @Override
27 // 返回的视图数量
28 public int getCount() {
29 return data.size();//这里我们根据传进来list来返回
30 }
31
32 @Override
33 // 根据position获取item的数据
34 public Object getItem(int position) {
35 return data.get(position);
36 }
37
38 @Override
39 // 根据position返回item的ID
40 public long getItemId(int position) {
41 return position;
42 }
43
44 @Override
45 // 返回视图,这个方法很主要
46 public View getView(int position, View arg1, ViewGroup arg2) {
47 View view = View.inflate(context, R.layout.lisviewt_item1, null);
48 FriendBean fb = data.get(position); //获得封装对象的数据,根据position
49 ImageView img = (ImageView) view.findViewById(R.id.iv); //得到布局下的控件
50 TextView name = (TextView) view.findViewById(R.id.tv_1);//得到布局下的控件
51 TextView gexing = (TextView) view.findViewById(R.id.tv_2);
52 img.setImageResource(fb.getImgID()); //给这个控件加入图片,资源就是从封装数据的对象中得到的
53 name.setText(fb.getName());
54 gexing.setText(fb.getGexing());
55 return view;
56 }
57
58 }
好了这个方法写完了,然后我们就要着手把adapter和Llistview绑定,但是我们首先要解决一个问题,我们怎么能够把图片和两个字符串传给list,这时候我们就需要一个对象来封装这三个数据了,然后把这个对象添加到集合里面去。
1 package com.example.listviewwx2;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import com.example.listviewwx2.bean.FriendBean;
7
8 import android.os.Bundle;
9 import android.app.Activity;
10 import android.view.Menu;
11 import android.widget.ListView;
12
13 public class MainActivity extends Activity {
14
15 private ListView lv ;
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.activity_main);
20 lv = (ListView) findViewById(R.id.lv);
21
22 FriendAdapter fa = new FriendAdapter(getData(), this);
23 //声明adapter并实例化,
24 lv.setAdapter(fa);
25 }
26 private List<FriendBean> getData() {
27 FriendBean fb = new FriendBean();
28 //声明javabean并且实例化
29 List<FriendBean> list = new ArrayList<FriendBean>();
30 //声明集合
31 for (int i = 0; i < 10; i++) {
32 fb.setImgID(R.drawable.ic_launcher);
33 fb.setGexing("我是小安卓我要成为出色的操作系统");
34 fb.setName("Android");
35 list.add(fb);
36 }
37 return list;
38 }
39
40
41
42 }
1 package com.example.listviewwx2.bean;
2
3 public class FriendBean {
4 private int imgID;
5 private String name;
6 private String gexing;
7 public int getImgID() {
8 return imgID;
9 }
10 public void setImgID(int imgID) {
11 this.imgID = imgID;
12 }
13 public String getName() {
14 return name;
15 }
16 public void setName(String name) {
17 this.name = name;
18 }
19 public String getGexing() {
20 return gexing;
21 }
22 public void setGexing(String gexing) {
23 this.gexing = gexing;
24 }
25
26 }