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

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

引言:

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

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

 

实现效果:

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

 

实现过程:

  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中

BaseAdapter自定义适配器——思路详解
 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
BaseAdapter自定义适配器——思路详解
 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
BaseAdapter自定义适配器——思路详解
 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
BaseAdapter自定义适配器——思路详解
 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中

BaseAdapter自定义适配器——思路详解
 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

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(BaseAdapter)