编写自己的Adapter模板

Home / Android MrLee 2015-3-6 5393

如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么? 代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用了,编写和执行效率大大提升啊。 BaseAdapter.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package com.android.dev.base;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.content.Context;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
 * 实现这个适配器模板会少很多代码
 * @author leehom
 * @param <T>
 */
public abstract class BaseAdapter<T> extends android.widget.BaseAdapter {
    protected List<T> list;
    protected Context context;
    protected LayoutInflater inflater;
    private int layoutID;
    public BaseAdapter(Context context, T[] ts, int layoutID) {
        super();
        this.context = context;
        this.list = new ArrayList<T>();
        this.layoutID = layoutID;
        Collections.addAll(list, ts);
        this.inflater = LayoutInflater.from(context);
    }
    public BaseAdapter(Context context, List<T> list, int layoutID) {
        super();
        this.layoutID = layoutID;
        this.context = context;
        this.list = new ArrayList<T>();
        this.list.addAll(list);
        this.inflater = LayoutInflater.from(context);
    }
    public Resources getResources() {
        return context.getResources();
    }
    public synchronized void add(T object) {
        list.add(object);
    }
    public synchronized void addAll(Collection<? extends T> collection) {
        list.addAll(collection);
    }
    public synchronized void remove(T object) {
        list.remove(object);
    }
    public synchronized void insert(T object, int index) {
        list.add(index, object);
    }
    public synchronized void clear() {
        list.clear();
    }
    public synchronized void sort(Comparator<? super T> comparator) {
        Collections.sort(list, comparator);
    }
    @Override
    public T getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = inflater.inflate(layoutID, null);
            holder = new ViewHolder(convertView);
            initView(holder);
            convertView.setTag(holder);
        else {
            holder = (ViewHolder) convertView.getTag();
        }
        setViewValue(holder, position);
        return convertView;
    }
    public List<T> getList() {
        return list;
    }
     
    /**
     * 向ViewHolder类里面添加View
     * @param holder
     */
    public abstract void initView(ViewHolder holder);
    /**
     * 从ViewHolder获取对应ID的View设置其值
     * @param holder
     * @param t 数据对象
     */
    public abstract void setViewValue(ViewHolder holder, int position);
}


用的时候也是继承它,然后只需要初始化ID和设置Value就行了。每次实现的代码仅仅这么点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.List;
import android.content.Context;
import com.android.dev.base.BaseAdapter;
import com.android.dev.base.ViewHolder
public class ReceiveAdapter extends BaseAdapter<DataItem> {
    public ReceiveAdapter(Context context, List<DataItem> list, int layoutID) {
        super(context, list, layoutID);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void initView(ViewHolder holder) {
        // TODO Auto-generated method stub
        holder.addView(R.id.name);
        holder.addView(R.id.value);
    }
    @Override
    public void setViewValue(ViewHolder holder, int position) {
        // TODO Auto-generated method stub
        DataItem item = getItem(position);
        holder.setText(R.id.name, item.getName());
        holder.setText(R.id.value, item.getValue());
    }
    @Override
    public boolean isEnabled(int position) {
        // TODO Auto-generated method stub
        return false;
    }
}

是不是非常不错呢?

最后是ViewHolder代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.android.dev.base;
import android.util.SparseArray;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
public class ViewHolder {
    SparseArray<View> array;
    View parent;
    Object obj;
    public ViewHolder(View parent) {
        this.parent = parent;
        array = new SparseArray<View>();
    }
    public void addView(int id) {
        array.append(id, parent.findViewById(id));
    }
    public View getView(int id) {
        return array.get(id);
    }
    public void setVisible(int id, boolean visible) {
        if (visible)
            getView(id).setVisibility(View.VISIBLE);
        else
            getView(id).setVisibility(View.INVISIBLE);
    }
    public void setVisibleGone(int id, boolean visible) {
        if (visible)
            getView(id).setVisibility(View.VISIBLE);
        else
            getView(id).setVisibility(View.GONE);
    }
    public void setSelected(int id, boolean selected) {
        getView(id).setSelected(selected);
    }
    public Button getButton(int id) {
        return (Button) getView(id);
    }
    public TextView getTextView(int id) {
        return (TextView) getView(id);
    }
    public EditText getEditView(int id) {
        return (EditText) getView(id);
    }
    public ImageView getImageView(int id) {
        return (ImageView) getView(id);
    }
    public ImageButton getImageButton(int id) {
        return (ImageButton) getView(id);
    }
    public void setText(int id, String text) {
        getTextView(id).setText(text);
    }
    public void setText(int id, CharSequence text) {
        getTextView(id).setText(text);
    }
    public void setText(int id, int text) {
        getTextView(id).setText(String.valueOf(text));
    }
    public void setText(int id, float text) {
        getTextView(id).setText(String.valueOf(text));
    }
    public void setImage(int id, int imgId) {
        getImageView(id).setImageResource(imgId);
    }
    public void showView(int id) {
        getView(id).setVisibility(View.VISIBLE);
    }
    public void hideView(int id, boolean gone) {
        getView(id).setVisibility(gone ? View.GONE : View.INVISIBLE);
    }
    public void setTag(int id, Object obj) {
        getView(id).setTag(obj);
    }
    public Object getTag(int id) {
        return getView(id).getTag();
    }
    public View getParent() {
        return parent;
    }
    public void setParent(View parent) {
        this.parent = parent;
    }
    public Object getObj() {
        return obj;
    }
    public void setObj(Object obj) {
        this.obj = obj;
    }
}


本文链接:https://it72.com/1300.htm

推荐阅读
最新回复 (2)
  • BarbarasWexy 2015-3-26
    引用 2
    ViewHolder如何写的,可否也贴出来呢?
  • LucieA8696582846 2015-3-26
    引用 3
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    package com.android.dev.base;
    import android.util.SparseArray;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.TextView;
    public class ViewHolder {
        SparseArray<View> array;
        View parent;
        Object obj;
        public ViewHolder(View parent) {
            this.parent = parent;
            array = new SparseArray<View>();
        }
        public void addView(int id) {
            array.append(id, parent.findViewById(id));
        }
        public View getView(int id) {
            return array.get(id);
        }
        public void setVisible(int id, boolean visible) {
            if (visible)
                getView(id).setVisibility(View.VISIBLE);
            else
                getView(id).setVisibility(View.INVISIBLE);
        }
        public void setVisibleGone(int id, boolean visible) {
            if (visible)
                getView(id).setVisibility(View.VISIBLE);
            else
                getView(id).setVisibility(View.GONE);
        }
        public void setSelected(int id, boolean selected) {
            getView(id).setSelected(selected);
        }
        public Button getButton(int id) {
            return (Button) getView(id);
        }
        public TextView getTextView(int id) {
            return (TextView) getView(id);
        }
        public EditText getEditView(int id) {
            return (EditText) getView(id);
        }
        public ImageView getImageView(int id) {
            return (ImageView) getView(id);
        }
        public ImageButton getImageButton(int id) {
            return (ImageButton) getView(id);
        }
        public void setText(int id, String text) {
            getTextView(id).setText(text);
        }
        public void setText(int id, CharSequence text) {
            getTextView(id).setText(text);
        }
        public void setText(int id, int text) {
            getTextView(id).setText(String.valueOf(text));
        }
        public void setText(int id, float text) {
            getTextView(id).setText(String.valueOf(text));
        }
        public void setImage(int id, int imgId) {
            getImageView(id).setImageResource(imgId);
        }
        public void showView(int id) {
            getView(id).setVisibility(View.VISIBLE);
        }
        public void hideView(int id, boolean gone) {
            getView(id).setVisibility(gone ? View.GONE : View.INVISIBLE);
        }
        public void setTag(int id, Object obj) {
            getView(id).setTag(obj);
        }
        public Object getTag(int id) {
            return getView(id).getTag();
        }
        public View getParent() {
            return parent;
        }
        public void setParent(View parent) {
            this.parent = parent;
        }
        public Object getObj() {
            return obj;
        }
        public void setObj(Object obj) {
            this.obj = obj;
        }
    }


返回