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 }