BaseAdapter自定义适配器——思路详解

BaseAdapter自定义适配器——思路详解

引言:

Adapter用来把数据绑定到扩展了AdapterView类的视图组。系统自带了几个原生的Adapter。

由于原生的Adapter视图功能太少,有时需要有自己的视图格式。并且在开发中经常用到。

 

实现效果:

 

实现过程:

  1. 重写视图区域:

    即重写BaseAdapter

         有四方要重写:

public int getCount() 

数据域大小方法

public Object getItem(int arg0)

返回每个Item的数据据

public long getItemId(int arg0)

返回每个Item的ID

View getView(int arg0, View arg1, ViewGroup arg2)

最重要的是:重绘视图,调用次数是由第一个方法确定的。最后将视图返回。

注意:有些控件必须设置成没有获利焦点与点击。

这几个方法写的内容基本不变,具有参考价值。

2.重写数据区域使用ArrayList实现List。

先封装一个数据类,再将这个数据类装进List集合中。

这两个集合是很重要的,开发中是很常用的。但是《疯狂Java讲义》中讲的很少,但讲的很全。

3.绑定数据区域与视图区域

setListAdapter(MyAdapter);

注:MyAdapter是自定义的Adapter。

代码实现:

 JAVA代码:

MainActivity.java、MyAdapter.java、User.java、UserManger.java中

 1 package com.example.baseadapteriwrite;
 2 
 3 import java.util.ArrayList;
 4 
 5 import android.os.Bundle;
 6 
 7 import android.app.Activity;
 8 import android.app.ListActivity;
 9 import android.content.Context;
10 import android.view.Menu;
11 import android.widget.ListView;
12 
13 public class MainActivity extends ListActivity {
14 
15     private ArrayList<User> mList=null;
16     private Context context=null;
17     private ListView listView=null;
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         context=this;
22         listView=this.getListView();
23         mList=(ArrayList<User>) UserManger.getUserList();
24         MyAdapter adapter = new MyAdapter(context, mList);
25         
26         setListAdapter(adapter);
27     }
28     
29 
30     @Override
31     public boolean onCreateOptionsMenu(Menu menu) {
32         // Inflate the menu; this adds items to the action bar if it is present.
33         getMenuInflater().inflate(R.menu.main, menu);
34         return true;
35     }
36 
37 }
View Code
 1 import java.util.List;
 2 import android.content.Context;
 3 import android.view.LayoutInflater;
 4 import android.view.View;
 5 import android.view.ViewGroup;
 6 import android.widget.BaseAdapter;
 7 import android.widget.TextView;
 8 
 9 public class MyAdapter extends BaseAdapter {
10     private List<User> list = null;
11     private Context context = null;
12 
13     public MyAdapter(Context context, List<User> list) {
14         this.list=list;
15         this.context = context;
16     }
17 
18     @Override
19     public int getCount() {
20         // TODO Auto-generated method stub
21         // 多少 个数据
22         return list.size();
23     }
24 
25     @Override
26     public Object getItem(int arg0) {
27         // TODO Auto-generated method stub
28         return list.get(arg0);
29     }
30 
31     @Override
32     public long getItemId(int arg0) {
33         // TODO Auto-generated method stub
34         return arg0;
35     }
36 
37     @Override
38     public View getView(int arg0, View arg1, ViewGroup arg2) {
39         // TODO Auto-generated method stub
40         TextView text1=null,text2=null;
41         if(arg1==null)
42         {
43             LayoutInflater inflater = LayoutInflater.from(context);
44             arg1 = inflater.inflate(R.layout.activity_main,null);
45         }
46         text1=(TextView) arg1.findViewById(R.id.textView1);
47         text2=(TextView) arg1.findViewById(R.id.textView2);
48         text1.setText(list.get(arg0).getmName());
49         text2.setText(list.get(arg0).getmAge());
50         return arg1;
51     }
52 }
View Code
 1 public class User
 2 {
 3     private String mName=null;
 4     private String mAge=null;
 5     
 6     public User(String name,String age)
 7     {
 8         this.mName=name;
 9         this.mAge =age;
10     }
11     
12     public String getmName() {
13         return mName;
14     }
15 
16     public void setmName(String mName) {
17         this.mName = mName;
18     }
19 
20     public String getmAge() {
21         return mAge;
22     }
23 
24     public void setmAge(String mAge) {
25         this.mAge = mAge;
26     }
27 }
View Code
 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 public class UserManger {
 5 
 6     
 7     public static List<User> getUserList() 
 8     {
 9         List<User> list=new ArrayList<User>();
10         for(int i = 0;i<20;++i)
11         {
12             User user=new User("MM"+i,"12"+i);
13             list.add(user);
14         }
15         return list;
16     }
17 
18 }
View Code

XML代码:

activity_main.xml中

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="fill_parent"
 3     android:layout_height="fill_parent"
 4     android:orientation="horizontal" >
 5     <ImageView
 6       android:id="@+id/imageView1"
 7       android:layout_width="wrap_content"
 8       android:layout_height="wrap_content"
 9       android:src="@drawable/ic_launcher" />
10     
11     <TextView
12         android:id="@+id/textView1"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"/>
15 
16     <TextView
17         android:id="@+id/textView2"
18         android:layout_width="wrap_content"
19         android:layout_height="wrap_content" />
20     
21 </LinearLayout>
View Code

 

 

 

 

 

 

 

 

 

posted @ 2014-01-15 22:13  退之  阅读(1749)  评论(0编辑  收藏  举报