The Adapter of ListView: Just adapt data to view, don’t do anything else

The design of SimpleAdapter is not good in my opinion.

An adapter should just adapter the data to view, not care to inflate xml to create Layout View, hold the member Views of the layout view, and, fill the datas to each member View one by one. SimpleAdapter does these things all together. It is high coupling design.

The solution is a ItemViewHolder class, which inflate and hold the layout view and its member views, and parse datas to fill them to member views one by one. And the most cool is, it’s layout view of ItemViewHolder set “this” as its tag. So that you can get the ItemViewHolder instance of the convertView in getView(…, View convertView, …) function.

See below code snippets.

In Adapter, passed in a List as data list.

1
List dataList;
and override getView() like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ItemViewHolder item = null;

if(convertView == null) {  
    item = new ItemViewHolder(context);  
    convertView = item.getLayoutView();  
} else {  
    item = (ItemViewHolder)convertView.getTag();  
}  

item.setItemData(dataList.get(position));  

return convertView;  

}
ItemViewHolder is the views holder of the convertView.

public class ItemViewHolder {

//The layout View of the item of the ListView.  
private View layoutView = null;  
//The member Views to display data.  
private TextView textView = null;  
private ImageView imageView = null;  
… …  

public ItemViewHolder (Context context) {  
    super(context);  

     initUI();  
}  

public View getLayoutView() {  
    return layoutView;  
}  

public void setItemData(Data data) {  
    textView.setText(data.getText());  
    imageView.setImage(data.getImage());  
    … …  
}  

private void initUI() {  
     LayoutInflater inflater = LayoutInflater.from(mContext);  
     layoutView = inflater.inflate(R.layout.item_view_layout, null);  
    //  
    textView = (TextView) layoutView.findViewById(R.id.textview);  
    imageView = (ImageView)layoutView.findViewById(R.id.imageview);  
   //This is the most important code.  
   layoutView.setTag(this);  
}  

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值