1.建立一個積累MyBaseAdapter,繼承製BaseAdapteride
2.在MyBaseAdapter中建立構造方法,經過構造方法把ArrayList類型的數據data傳入,實現前三個構造方法佈局
代碼以下:this
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) { BaseHolder<T> holder = null; if (convertView == null) { // 子類返回具體對象 holder = getHolder(); } else { holder = (BaseHolder<T>) convertView.getTag(); } }
3 讓HomeAdapter繼承MyBaseAdapter.net
1 建立類BaseHolder,實現如下4步code
1) 加載佈局文件 2) 初始化控件 3) 打標記Tag 4) 根據數據刷新界面 private View mRootView; private T data; public BaseHolder() { mRootView = initView(); // 3.打標記tag mRootView.setTag(this); } /** * 1.加載佈局 * 2.初始化控件 * [@return](https://my.oschina.net/u/556800) item的佈局對象 */ public abstract View initView(); /** * 返回item的佈局對象 * @return item的佈局對象 */ public View getRootView(){ return mRootView; } /** * 設置當前item的數據 * @param data 當前item的數據 */ public void setData(T data){ this.data = data; refreshView(data); } /** * 獲取當前item的數據 * @return 當前item的數據 */ public T getData(){ return data; } /** * 4.根據數據來刷新界面 * @param data 當前item的數據 */ public abstract void refreshView(T data);
2 建立HomeHolder,繼承BaseHolder,實現BaseHolder中的兩個抽象方法對象
代碼以下: private TextView tv_content; @Override public View initView() { View view = UIUtils.inflate(R.layout.list_item_home); tv_content = (TextView) view.findViewById(R.id.tv_content); return view; } @Override public void refreshView(String data) { tv_content.setText(data); }
3 在MyBaseAdapter中實現方法getView的邏輯繼承
@Override public View getView(int position, View convertView, ViewGroup parent) { BaseHolder<T> holder = null; if (convertView == null) { // 子類返回具體對象 holder = getHolder(); } else { holder = (BaseHolder<T>) convertView.getTag(); } // 根據數據來刷新界面 holder.setData(getItem(position)); return holder.getRootView(); } public abstract BaseHolder<T> getHolder(); 注意:要在類名前加abstract關鍵字
4 建立HomeAdapter,繼承MyBaseAdapter,實現構造方法和getHolder的方法get
public HomeAdapter(ArrayList<String> data) { super(data); } @Override public BaseHolder<String> getHolder() { return new HomeHolder(); }
之後再寫ListView的Adapter時只須要實現第四步中的兩個方法就能夠了,大大減小了代碼量,在ListView不少的項目中仍是很方便的。it