Java泛型應用之打造Android的萬能ViewHolder

在ListView的Adapter中的getView()方法中的繁瑣寫法

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null; if (convertView == null) {
convertView = LayoutInflater.from(context)
.inflate(R.layout.item, parent, false);
viewHolder = new ViewHolder(); viewHolder.name = (TextView) convertView.findViewById(R.id.name); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); }

viewHolder.name.setText("sss");

return convertView;  

}
private static class ViewHolder { TextView name; }</code></pre>

先了解一下SparseArray

SparseArray(稀疏數組).他是Android內部特有的api,標準的jdk是沒有這個類的.在Android內部用來替代HashMap<Integer,E>這種形式,使用SparseArray更加節省內存空間的使用,SparseArray也是以key和value對數據進行保存的.使用的時候只需要指定value的類型即可.并且key不需要封裝成對象類型.

最后經過優化和簡化后的代碼

  • 代碼
/**

  • Created by yuandl on 2016-10-13. */

import android.util.SparseArray; import android.view.View;

/**

  • 萬能的ViewHolder *
  • @author */ public class CommonViewHolder { /**

    • @param view 所有緩存View的根View
    • @param id 緩存View的唯一標識
    • @return */ public static <T extends View> T get(View view, int id) {

      SparseArray<View> viewHolder = (SparseArray<View>) view.getTag(); //如果根view沒有用來緩存View的集合 if (viewHolder == null) {

       viewHolder = new SparseArray<View>();
       view.setTag(viewHolder);//創建集合和根View關聯
      

      } View chidlView = viewHolder.get(id);//獲取根View儲存在集合中的孩紙 if (chidlView == null) {//如果沒有改孩紙

       //找到該孩紙
       chidlView = view.findViewById(id);
       viewHolder.put(id, chidlView);//保存到集合
      

      } return (T) chidlView; } }</code></pre>

      • 用法(可以看到省去了好多代碼)

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

      if (convertView == null) {
      convertView = LayoutInflater.from(context)

      .inflate(R.layout.item, parent, false);  
      

      }

      TextView name= ViewHolder.get(convertView, R.id.name);

      name.setText("sss");

      return convertView;
      }</code></pre> </li> </ul>

       

      來自:http://www.jianshu.com/p/43d5994e55b6

       

 本文由用戶 Cin61O 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!