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