Adapter中getView的理解!
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder holder;
if (convertView==null) {//一開始,顯示在螢幕內的item都沒有進入Recyclor,所以,convertView作為老的View是空的。
convertView=LayoutInflater.from(context).inflate(R.layout.group_item_view, null);//建立了一個View之後,這些convertView就會進入Recyclor,而Recyclor的大小依據螢幕上顯示物件的多少而定。
holder=new ViewHolder();
convertView.setTag(holder);//在View中繫結一個tag,作為附加的資料。
holder.groupItem=(TextView) convertView.findViewById(R.id.groupItem);
}
else{
holder=(ViewHolder) convertView.getTag();
}
holder.groupItem.setText(list.get(position));//該holder已經被convertView作為tag繫結。所以在此改的值也會在convertView中的tag中改變。相當於指標物件或者C#中的值型別的概念。
return convertView;//這個時候返回的convertView就是已經被重新賦值後的View了。只不過型別還是老的View的型別。
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder holder;
if (convertView==null) {//一開始,顯示在螢幕內的item都沒有進入Recyclor,所以,convertView作為老的View是空的。
convertView=LayoutInflater.from(context).inflate(R.layout.group_item_view, null);//建立了一個View之後,這些convertView就會進入Recyclor,而Recyclor的大小依據螢幕上顯示物件的多少而定。
holder=new ViewHolder();
convertView.setTag(holder);//在View中繫結一個tag,作為附加的資料。
holder.groupItem=(TextView) convertView.findViewById(R.id.groupItem);
}
else{
holder=(ViewHolder) convertView.getTag();
}
holder.groupItem.setText(list.get(position));//該holder已經被convertView作為tag繫結。所以在此改的值也會在convertView中的tag中改變。相當於指標物件或者C#中的值型別的概念。
return convertView;//這個時候返回的convertView就是已經被重新賦值後的View了。只不過型別還是老的View的型別。
}
static class ViewHolder {//匿名內部類,使用的是靜態類
TextView groupItem;
}
上述的方法主要是考慮到如果有1億個物件的時候,不可能老是在建立View物件。因為對於一個操作來講,一般listview中的每個item總是一個相同的控制元件,可以把螢幕中顯示的控制元件物件儲存的記憶體中,而跟螢幕大小相同的控制元件物件儲存在Recyclor中,如果螢幕上請求新的item,那麼直接從recyclor中取原來老的那個item,只不過把老的item裡面的值改變一下,就可以了。
相關文章
- Adapter的getView方法詳解APTView
- android adapter getView方法中return null發生的異常AndroidAPTViewNull
- Android ListView的getview()中重複呼叫(position重複呼叫)AndroidView
- RecyclerView的Adapter中attach和detach探索ViewAPT
- 解決直播商城原始碼中,getView被重複呼叫原始碼View
- android開發 BaseAdapter中getView()裡的3個引數的含義AndroidAPTView
- Android RecyclerView中Adapter和ViewHoAndroidViewAPT
- AdapterView的使用與getView函式詳解APTView函式
- android開發 BaseAdapter中getView()裡的3個引數是什麼意思AndroidAPTView
- AdapterAPT
- Websphere Adapter 中錯誤處理的原理與應用WebAPT
- RecyclerView Adapter 系列(1):RecyclerView Array AdapterViewAPT
- 理解 JavaScript 中的 thisJavaScript
- 理解JS中的thisJS
- getView().scroller.dom為空或者不是物件View物件
- 我所理解的設計模式(C++實現)——介面卡模式(Adapter Pattern)設計模式C++APT
- RecyclerView-->通用的AdapterViewAPT
- 關於ListView的getView方法被多次重複呼叫的問題View
- Adapter PatternAPT
- 理解 CSS 中的 BFCCSS
- 理解 JavaScript 中的原型JavaScript原型
- Vue中mixin的理解Vue
- 理解 CSS中的BFCCSS
- 全面理解JavaScript中的thisJavaScript
- oracle中的exists理解Oracle
- 理解 PHP 中的 StreamsPHP
- javascript 中{}和[] 的理解JavaScript
- 對HTML中"#"的理解HTML
- 簡化你的列表AdapterAPT
- 關於ADAPTER的問題APT
- recycleView通用AdapterViewAPT
- Android中利用ViewHolder優化自定義Adapter的典型寫法AndroidView優化APT
- 理解C#中的ValueTaskC#
- JS中this的深入理解JS
- 理解 JavaScript 中的迴圈JavaScript
- mysql中BTree索引的理解MySql索引
- 深入理解Js中的thisJS
- 對Innodb中MVCC的理解MVC