- 1未封裝标準寫法
- 2封裝BaseHolder
- 3實體Holder
- 4封裝BaseAdapter
- 5實體Adapter
1未封裝标準寫法
MyAdapter.java
class MyAdapter extends BaseAdapter {
private ArrayList data;
public MyAdapter(List data){
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
holder = new ViewHolder();
// 1.加載布局檔案
View view = View.inflate(context, R.layout.listviewitem, null);
// 2.初始化控件
holder.textView = view.findViewById(R.id.textView1);
// 3.打一個tag标記
view.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
// 4.設定資料重新整理内容
holder.textView.setText("設定内容");
return convertView;
}
}
static class ViewHolder {
TextView textView;
}
2封裝BaseHolder
MyBaseHolder.java
public abstract class MyBaseHolder<T> {
// 一個item的根布局
private View mRootView;
// 一個item的資料
private T data;
// 當new這個對象時, 就會加載布局, 初始化控件,設定tag
public MyBaseHolder() {
mRootView = initView();
// 3. 打一個标記tag
mRootView.setTag(this);
}
// 1. 加載布局檔案
// 2. 初始化控件 findViewById
public abstract View initView();
// 傳回item的布局對象
public View getRootView() {
return mRootView;
}
// 設定目前item的資料
public void setData(T data) {
this.data = data;
refreshView(data);
}
// 擷取目前item的資料
public T getData() {
return data;
}
// 4. 根據資料來重新整理界面
public abstract void refreshView(T data);
}
3實體Holder
SpecificHolder.java
public class SpecificHolder extends MyBaseHolder<String> {
private TextView mTextView;
@Override
public View initView() {
// 1. 加載布局
View view = View.inflate(null, R.layout.item_listview, null);
// 2. 初始化控件
mTextView = (TextView) view.findViewById(R.id.textView1);
return view;
}
@Override
public void refreshView(String data) {
// 3. 設定内容重新整理界面
mTextView.setText(data);
}
}
4封裝BaseAdapter
MyBaseAdapter.java
public abstract class MyBaseAdapter<T> extends BaseAdapter {
private ArrayList<T> data;
public MyBaseAdapter(ArrayList<T> data) {
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public T getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyBaseHolder<T> baseHolder;
if(convertView == null){
// 1. 加載布局檔案
// 2. 初始化控件 findViewById
// 3. 打一個标記tag
baseHolder = getHolder();
}else{
baseHolder = (MyBaseHolder<T>) convertView.getTag();
}
// 4. 設定内容重新整理界面
baseHolder.setData(getItem(position));
return baseHolder.getRootView();
}
public abstract MyBaseHolder<T> getHolder();
}
5實體Adapter
MyAdapter.java
class MyAdapter extends MyBaseAdapter<String>{
public MyAdapter(ArrayList<String> data) {
super(data);
}
@Override
public MyBaseHolder<String> getHolder() {
return new SpecificHolder();
}
}