zoukankan      html  css  js  c++  java
  • 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<Data> 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.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    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);  
        }  
    }
  • 相关阅读:
    前端JavaScript(2) --常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍
    前端JavaScript(3)-关于DOM操作的相关案例,JS中的面向对象、定时器、BOM、位置信息
    前端JavaScript(1) --Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏
    前端CSS(3)
    CSS标签大全
    前端CSS(2)
    前端CSS(1)
    前端HTML(二/三)
    前端基础(1)
    第一个自定义HTML网页
  • 原文地址:https://www.cnblogs.com/mosthink/p/5288905.html
Copyright © 2011-2022 走看看