0
点赞
收藏
分享

微信扫一扫

Android ListView框架搭建:抽取Adapter共性的方法与属性进行封装


1、创建基类BaseHolder,把与ConvertView相关的数据操作全部在这个类里实现

public abstract class BaseHolder<T> {
protected View contentView;
protected T data;
public BaseHolder(){
contentView=initView();
contentView.setTag(this); // 在这个位置设置的标签
}

public void setData(T data) {
this.data=data;
refreshView(data);
}
/**
* 当Holder中的view对象显示到界面上的时候调用
* @return
*/
public View getContentView() {
return contentView;
}
/**
* 当setData调用的时候 会调用该方法 根据数据 显示界面
*/
protected abstract void refreshView(T data);

/**
* 初始化View对象 及其控件
* @return
*/
protected abstract View initView();
}

2、创建DefaultAdapter,所有的Adapter都继承这个类

public abstract class DefaultAdapter<T> extends BaseAdapter {
private List<T> datas;
public DefaultAdapter(List<T> datas){
this.datas=datas;
}

@Override
public int getCount() {
return datas.size();
}

@Override
public Object getItem(int position) {
return datas.get(position);
}

@Override
public long getItemId(int position) {
return position;
}
//convertView 划出屏幕的view对象
@Override
public View getView(int position, View convertView, ViewGroup parent) {
BaseHolder<T> holder;
if(convertView==null){
holder=getHolder();
}else{
holder=(BaseHolder<T>)convertView.getTag();
}
T string = datas.get(position);
//holder.refreshView(string);
holder.setData(string);

return holder.getContentView();
}

protected abstract BaseHolder<T> getHolder();

}

3、使用实例

public class MainActivity extends Activity {
private ListView lv;
private List<String> datas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
datas=new ArrayList<String>();
for(int i=0;i<100;i++){
datas.add("aabbbcc"+i);
}

lv=(ListView) findViewById(R.id.lv);
lv.setAdapter(new MainAdapter(datas));

}
public void click(View v){
Intent intent=new Intent(this, SecondActivity.class);
startActivity(intent);

}

private class MainAdapter extends DefaultAdapter<String>{

public MainAdapter(List<String> datas) {
super(datas);
// TODO Auto-generated constructor stub
}

@Override
protected BaseHolder<String> getHolder() {
return new MainHolder();
}



}
class MainHolder extends BaseHolder<String>{
private TextView tv;
// 当执行new MainHolder() 会调用该方法
@Override
protected void refreshView(String data) {
this.tv.setText(data);
}
@Override
protected View initView() {
View view=View.inflate(getApplicationContext(), R.layout.item_main, null);
this.tv=(TextView) view.findViewById(R.id.tv);
return view;
}
}
}

举报

相关推荐

0 条评论