BaseAdapter自定义适配器——思路详解
引言:
Adapter用来把数据绑定到扩展了AdapterView类的视图组。系统自带了几个原生的Adapter。
由于原生的Adapter视图功能太少,有时需要有自己的视图格式。并且在开发中经常用到。
实现效果:
实现过程:
-
重写视图区域:
即重写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 }
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 }
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 }
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 }
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>