如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么?
代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用了,编写和执行效率大大提升啊。
BaseAdapter.java
monospace !important; direction: ltr !important; display: block !important; background: none !important;">001
class="keyword" style="border: 0px !important; padding: 0px !important; margin: 0px !important; float: none !important; vertical-align: baseline !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: bold !important; direction: ltr !important; display: inline !important; color: #006699 !important; background: none !important;">import
java.util.ArrayList;
002
import
java.util.Collection;
003
import
java.util.Collections;
004
import
java.util.Comparator;
005
import
java.util.List;
006
?
007
import
android.content.Context;
008
import
android.content.res.Resources;
009
import
android.view.LayoutInflater;
010
import
android.view.View;
011
import
android.view.ViewGroup;
012
?
013
?
014
/**
015
?
* 实现这个适配器模板会少很多代码
016
?
* @author leehom
017
?
* @param <T>
018
?
*/
019
public
abstract
class
BaseAdapter<T>
extends
android.widget.BaseAdapter {
020
?
021
????
protected
List<T> list;
022
????
protected
Context context;
023
????
protected
LayoutInflater inflater;
024
????
private
int
layoutID;
025
?
026
????
public
BaseAdapter(Context context, T[] ts,
int
layoutID) {
027
????????
super
();
028
????????
this
.context = context;
029
????????
this
.list =
new
ArrayList<T>();
030
????????
this
.layoutID = layoutID;
031
????????
Collections.addAll(list, ts);
032
????????
this
.inflater = LayoutInflater.from(context);
033
????
}
034
?
035
????
public
BaseAdapter(Context context, List<T> list,
int
layoutID) {
036
????????
super
();
037
????????
this
.layoutID = layoutID;
038
????????
this
.context = context;
039
????????
this
.list =
new
ArrayList<T>();
040
????????
this
.list.addAll(list);
041
????????
this
.inflater = LayoutInflater.from(context);
042
????
}
043
?
044
????
public
Resources getResources() {
045
????????
return
context.getResources();
046
????
}
047
?
048
????
public
synchronized
void
add(T object) {
049
????????
list.add(object);
050
????
}
051
?
052
????
public
synchronized
void
addAll(Collection<?
extends
T> collection) {
053
????????
list.addAll(collection);
054
????
}
055
?
056
????
public
synchronized
void
remove(T object) {
057
????????
list.remove(object);
058
????
}
059
?
060
????
public
synchronized
void
insert(T object,
int
index) {
061
????????
list.add(index, object);
062
????
}
063
?
064
????
public
synchronized
void
clear() {
065
????????
list.clear();
066
????
}
067
?
068
????
public
synchronized
void
sort(Comparator<?
super
T> comparator) {
069
????????
Collections.sort(list, comparator);
070
????
}
071
?
072
????
@Override
073
????
public
T getItem(
int
position) {
074
????????
// TODO Auto-generated method stub
075
????????
return
list.get(position);
076
????
}
077
?
078
????
@Override
079
????
public
int
getCount() {
080
????????
// TODO Auto-generated method stub
081
????????
return
list.size();
082
????
}
083
?
084
????
@Override
085
????
public
long
getItemId(
int
position) {
086
????????
// TODO Auto-generated method stub
087
????????
return
position;
088
????
}
089
?
090
????
@Override
091
????
public
View getView(
int
position, View convertView, ViewGroup parent) {
092
????????
// TODO Auto-generated method stub
093
????????
ViewHolder holder =
null
;
094
????????
if
(convertView ==
null
) {
095
????????????
convertView = inflater.inflate(layoutID,
null
);
096
????????????
holder =
new
ViewHolder(convertView);
097
????????????
initView(holder);
098
????????????
convertView.setTag(holder);
099
????????
}
else
{
100
????????????
holder = (ViewHolder) convertView.getTag();
101
????????
}
102
????????
setViewValue(holder, position);
103
????????
return
convertView;
104
????
}
105
?
106
????
public
List<T> getList() {
107
????????
return
list;
108
????
}
109
????
?
110
????
/**
111
?????
* 向ViewHolder类里面添加View
112
?????
* @param holder
113
?????
*/
114
????
public
abstract
void
initView(ViewHolder holder);
115
?
116
????
/**
117
?????
* 从ViewHolder获取对应ID的View设置其值
118
?????
* @param holder
119
?????
* @param t 数据对象
120
?????
*/
121
????
public
abstract
void
setViewValue(ViewHolder holder,
int
position);
122
?
123
}
用的时候也是继承它,然后只需要初始化ID和设置Value就行了。例:
01
import
java.lang.reflect.Field;
02
import
java.lang.reflect.InvocationTargetException;
03
import
java.lang.reflect.Method;
04
import
java.util.ArrayList;
05
?
06
import
android.annotation.SuppressLint;
07
import
android.content.Context;
08
?
09
import
com.fenjin.app.humiture.R;
10
import
com.fenjin.app.item.DefaultItem;
11
?
12
@SuppressLint
(
"DefaultLocale"
)
13
public
class
DefaultAdapter
extends
BaseAdapter<DefaultItem> {
14
?
15
????
public
DefaultAdapter(Context context, Object object) {
16
????????
super
(context,
new
ArrayList<DefaultItem>(),
17
????????????????
R.layout.default_list_item_layout);
18
????????
// TODO Auto-generated constructor stub
19
????????
try
{
20
????????????
Field[] fields = object.getClass().getDeclaredFields();
21
????????????
for
(Field field : fields) {
22
????????????????
String lable = field.getName();
23
????????????????
String firstWord = lable.substring(
0
,
1
).toUpperCase();
24
????????????????
StringBuffer buffer =
new
StringBuffer(
"get"
);
25
????????????????
buffer.append(firstWord);
26
????????????????
buffer.append(lable.substring(
1
));
27
????????????????
String name = buffer.toString();
28
????????????????
Method method = object.getClass().getDeclaredMethod(name);
29
????????????????
String value = method.invoke(object).toString();
30
????????????????
DefaultItem item =
new
DefaultItem(lable, value);
31
????????????????
add(item);
32
????????????
}
33
????????
}
catch
(IllegalArgumentException e) {
34
????????????
// TODO Auto-generated catch block
35
????????????
e.printStackTrace();
36
????????
}
catch
(NoSuchMethodException e) {
37
????????????
// TODO Auto-generated catch block
38
????????????
e.printStackTrace();
39
????????
}
catch
(IllegalAccessException e) {
40
????????????
// TODO Auto-generated catch block
41
????????????
e.printStackTrace();
42
????????
}
catch
(InvocationTargetException e) {
43
????????????
// TODO Auto-generated catch block
44
????????????
e.printStackTrace();
45
????????
}
46
????
}
47
?
48
????
@Override
49
????
public
void
initView(ViewHolder holder) {
50
????????
// TODO Auto-generated method stub
51
????????
holder.addView(R.id.default_lable);
52
????????
holder.addView(R.id.default_value);
53
????
}
54
?
55
????
@Override
56
????
public
void
setViewValue(ViewHolder holder,
int
position) {
57
????????
// TODO Auto-generated method stub
58
????????
DefaultItem item = getItem(position);
59
????????
holder.getTextView(R.id.default_lable).setText(item.getLable());
60
????????
holder.getTextView(R.id.default_value).setText(item.getValue());
61
????
}
62
?
63
????
@Override
64
????
public
boolean
isEnabled(
int
position) {
65
????????
// TODO Auto-generated method stub
66
????????
return
false
;
67
????
}
68
?
69
}
javabean代码
01
public
class
DefaultItem {
02
?
03
????
String lable;
04
????
String value;
05
?
06
????
public
DefaultItem(String lable, String value) {
07
????????
super
();
08
????????
this
.lable = lable;
09
????????
this
.value = value;
10
????
}
11
?
12
????
public
String getLable() {
13
????????
return
lable;
14
????
}
15
?
16
????
public
void
setLable(String lable) {
17
????????
this
.lable = lable;
18
????
}
19
?
20
????
public
String getValue() {
21
????????
return
value;
22
????
}
23
?
24
????
public
void
setValue(String value) {
25
????????
this
.value = value;
26
????
}
27
?
28
}
xml代码
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
03
????
android:layout_width
=
"match_parent"
04
????
android:layout_height
=
"match_parent"
05
????
android:orientation
=
"horizontal"
06
????
android:padding
=
"@dimen/margin_10"
>
07
?
08
????
<
TextView
09
????????
android:id
=
"@+id/default_lable"
10
????????
android:layout_width
=
"wrap_content"
11
????????
android:layout_height
=
"wrap_content"
/>
12
?
13
????
<
TextView
14
????????
android:layout_width
=
"wrap_content"
15
????????
android:layout_height
=
"wrap_content"
16
????????
android:text
=
":"
/>
17
?
18
????
<
TextView
19
????????
android:id
=
"@+id/default_value"
20
????????
android:layout_width
=
"wrap_content"
21
????????
android:layout_height
=
"wrap_content"
/>
22
?
23
</
LinearLayout
>
每次实现的代码仅仅这么点
01
@Override
02
public
void
initView(ViewHolder holder) {
03
????
// TODO Auto-generated method stub
04
????
holder.addView(R.id.default_lable);
05
????
holder.addView(R.id.default_value);
06
}
07
?
08
@Override
09
public
void
setViewValue(ViewHolder holder,
int
position) {
10
????
// TODO Auto-generated method stub
11
????
DefaultItem item = getItem(position);
12
????
holder.getTextView(R.id.default_lable).setText(item.getLable());
13
????
holder.getTextView(R.id.default_value).setText(item.getValue());
14
}
是不是非常不错呢?