自定义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 }

 

posted @ 2015-09-27 16:21  aaddrrooiidd  阅读(364)  评论(0编辑  收藏  举报