91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android數據適配器ViewHolder怎么用

發布時間:2022-03-29 17:21:56 來源:億速云 閱讀:220 作者:iii 欄目:移動開發

這篇文章主要介紹了Android數據適配器ViewHolder怎么用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Android數據適配器ViewHolder怎么用文章都會有所收獲,下面我們一起來看看吧。

在使用Listview或GridView的時候,往往需要自定義數據適配器,一般都要覆寫getView(),在該方法中有一個convertView參數,該參數就是用來加載數據時的View。

Android數據適配器ViewHolder怎么用

初學者簡單但低效的方式

public View getView(int position, View convertView, ViewGroup parent) {     View item= inflater.inflate(R.layout.good_list_item, null, false);           ImageView img = (ImageView) item.findViewById(R.id.img);   TextView price = (TextView) item.findViewById(R.id.price);   img.setImageResource(R.drawable.ic_launcher);   price.setText("$"+list.get(position).price);              return item;  }

每次加載view,都要重新建立很多view對象,如果某條listview中有一萬條數據,這種加載方式就歇菜了。

利用convertView

利用Android的Recycler機制,利用convertView來重新回收View,效率有了本質提高。View的每次創建是比較耗時的,因此對于getview方法傳入的convertView應充分利用 != null的判斷 。

public View getView(int position, View convertView, ViewGroup parent) {        if(convertView==null){           convertView = inflater.inflate(R.layout.good_list_item, null, false);       }       TextView tv_price = (TextView)convertView.findViewById(R.id.price)       ImageView iv = (ImageView)convertView.findViewByID(R.id.img);              return convertView;   }

使用ViewHolder

ViewHolder將需要緩存的view封裝好,convertView的setTag才是將這些緩存起來供下次調用。 當你的listview里布局多樣化的時候 viewholder的作用體現明顯,效率再一次提高。 View的findViewById()方法也是比較耗時的,因此需要考慮只調用一次,之后就用View.getTag()方法來獲得ViewHolder對象。

class ViewHolder{       ImageView img;       TextView price;  } public View getView(int position, View convertView, ViewGroup parent) {       ViewHolder holder = new ViewHolder();       if(convertView==null){          convertView = inflater.inflate(R.layout.good_list_item, null, false);          holder.img = (ImageView) convertView.findViewById(R.id.img);           holder.price = (TextView) convertView.findViewById(R.id.price);           convertView.setTag(holder);         }else{           holder = (ViewHolder) convertView.getTag();       }       //設置holder       holder.img.setImageResource(R.drawable.ic_launcher);      holder.price.setText("$"+list.get(position).price);                  return convertView;   }

優雅的使用ViewHolder

使用ViewHolder時,每次一遍一遍的findViewById,一遍一遍在ViewHolder里面添加View的定義,view一多,是不是感覺煩爆了,base-adapter-helper這個類庫似乎***的解決了這個問題。

其設計思想是使用 SparseArray來存儲view的引用,代替了原本的ViewHolder,不用聲明一大堆View,簡潔明了。

我也自己動手寫了一個簡單版的ViewHolder。

public class ViewHolder{         private final SparseArray<View> views;      private View convertView;         private ViewHolder(View convertView){          this.views = new SparseArray<View>();          this.convertView = convertView;          convertView.setTag(this);      }        public static ViewHolder get(View convertView){          if (convertView == null) {              return new ViewHolder(convertView);          }          ViewHolder existedHolder = (ViewHolder) convertView.getTag();          return existedHolder;     }        public <T extends View> T getView(int viewId) {          View view = views.get(viewId);          if (view == null) {              view = convertView.findViewById(viewId);              views.put(viewId, view);          }          return (T) view;      }  }

使用的話就超級簡單和簡潔了:

public View getView(int position, View convertView, ViewGroup parent) {          if (convertView == null) {              convertView = LayoutInflater.from(context)                      .inflate(R.layout.good_list_item, null, false);          }             ViewHolder mViewHolder = ViewHolder.get(convertView);         TextView price = mViewHolder.getView(R.id.price);         //...其他getView             return convertView;      }

關于“Android數據適配器ViewHolder怎么用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Android數據適配器ViewHolder怎么用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉定区| 宜都市| 额尔古纳市| 五家渠市| 汕尾市| 梁山县| 乾安县| 彩票| 浏阳市| 景宁| 绥芬河市| 汤原县| 广安市| 呼和浩特市| 威远县| 高碑店市| 阿拉尔市| 延寿县| 凌海市| 宁都县| 大悟县| 泰来县| 无极县| 环江| 乐至县| 鹤峰县| 凌源市| 仪征市| 安图县| 庆阳市| 大埔区| 五华县| 收藏| 江津市| 镇江市| 谢通门县| 翁源县| 宝鸡市| 双辽市| 郴州市| 遵义市|