listview復(fù)用升級版---(比viewholder還刺激)

先簡述下使用場景:listview使用的頻率之高簡直貫穿整個android開發(fā),因此對于listview復(fù)用的優(yōu)化在近幾年也是出現(xiàn)了比較多的思路
1鸳玩,首先是不復(fù)用,這個不用說了演闭,直接在adapter的convertview直接寫就好了
2不跟,之后發(fā)現(xiàn)不復(fù)用的話,數(shù)據(jù)大的情況下米碰,listview直接造成OOM(內(nèi)存爆炸)窝革,后來出現(xiàn)了if(convertview == null){...}這一種復(fù)用
3,再之后就是谷歌爸爸在某一年io大會上推出的viewholder和新的api(settag)(據(jù)說是某一位谷歌員工寫來自己玩的吕座,后來給項目老大發(fā)現(xiàn)虐译,結(jié)果悲劇了)
4,使用了viewholder之后吴趴,listview就變得十分流暢漆诽,但是出現(xiàn)一個問題就是:如果每一個條目都可以操作(例如:EditText,甚至自己做的一些狀態(tài)選擇器锣枝,操作之后發(fā)現(xiàn)復(fù)用的過程中出現(xiàn)問題)。這個在實際的開發(fā)過程中,我做出了如下處理:使用一個集合寞射,儲存標(biāo)記位(boolean類型的flag值)劲藐,復(fù)用的過程中,添加if語句判斷(if(list.get(position).getFlag( ))),根據(jù)這個flag進(jìn)行判斷用戶之前是否操作過該條目---------之后陨闹,在閱讀一些技術(shù)大牛的博客以及大型項目代碼的過程中楞捂,我發(fā)現(xiàn)也是很多人這樣處理去避免復(fù)用的問題
5薄坏,(這個是我閱讀了xiaanming大牛的博客之后,才萌發(fā)了強烈的總結(jié)listview復(fù)用的心理)

public class NewsAdapter extends BaseAdapter { 
    // 定義Context private
    Context mContext;
    List<NewsListBean> list = new ArrayList<>(); 
    //定義hashMap 用來存放之前創(chuàng)建的每一項item 
    HashMap<Integer, View> lmap = new HashMap<Integer, View>(); 
    private ImageLoader imageLoader = ImageLoader.getInstance(); 

public NewsAdapter(Context context, List<NewsListBean> listViewList) { 
      this.mContext = context; 
      this.list = listViewList; 
} 

@Override 
public int getCount() { 
    return list.size(); 
} 

@Override public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) {
    return 0;
 } 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
  ViewHolder ViewHolder; 
  //創(chuàng)建每一個滑動出來的item項寨闹,將創(chuàng)建出來的項胶坠,放入數(shù)組中,為下次復(fù)用使用 
  if (lmap.get(position) == null) { 
      convertView = LayoutInflater.from(mContext).inflate(R.layout.news_item, null); 
      ViewHolder = new ViewHolder(convertView); 
      convertView.setTag(ViewHolder); lmap.put(position,convertView); 
  } else { 
      convertView = lmap.get(position); 
      ViewHolder = (ViewHolder) convertView.getTag(); 
  }

      ViewHolder.tv_newstime.setText(list.get(position).getDate());     
      ViewHolder.tvnewsneirong.setText(list.get(position).getContent()); 
      ViewHolder.tvnewstitle.setText(list.get(position).getTitle()); 
      imageLoader.displayImage(list.get(position).getImg(), ViewHolder.imgnewspic,  
      Tools.setBeforImageoption()); 

      return convertView;
}

//添加viewHolder
class ViewHolder {
      TextView tvnewstitle,newstype,tvnewsneirong,tv_newstime; 
      ImageView imgnewspic;

  public ViewHolder(View convertView) { 
      tvnewstitle = (TextView) convertView.findViewById(R.id.tvnewtitle); 
      imgnewspic = (ImageView) convertView.findViewById(R.id.imgnewspic);
      newstype= (TextView) convertView.findViewById(R.id.newstype);
      tvnewsneirong= (TextView) convertView.findViewById(R.id.tvnewsneirong);
      tv_newstime= (TextView) convertView.findViewById(R.id.tv_newstime); 
    }

}

原理就是鼻忠,用HashMap<Integer,View>儲存convertView涵但。
代碼還可以優(yōu)化,狀態(tài)也同時放入tag中做保存帖蔓,同樣在實現(xiàn)復(fù)用的時候復(fù)用狀態(tài)矮瘟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市塑娇,隨后出現(xiàn)的幾起案子澈侠,更是在濱河造成了極大的恐慌,老刑警劉巖埋酬,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哨啃,死亡現(xiàn)場離奇詭異,居然都是意外死亡写妥,警方通過查閱死者的電腦和手機拳球,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珍特,“玉大人祝峻,你說我怎么就攤上這事≡玻” “怎么了莱找?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嗜桌。 經(jīng)常有香客問我奥溺,道長,這世上最難降的妖魔是什么骨宠? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任浮定,我火速辦了婚禮,結(jié)果婚禮上层亿,老公的妹妹穿的比我還像新娘壶唤。我一直安慰自己,他們只是感情好棕所,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布闸盔。 她就那樣靜靜地躺著,像睡著了一般琳省。 火紅的嫁衣襯著肌膚如雪迎吵。 梳的紋絲不亂的頭發(fā)上躲撰,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音击费,去河邊找鬼拢蛋。 笑死,一個胖子當(dāng)著我的面吹牛蔫巩,可吹牛的內(nèi)容都是我干的谆棱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼圆仔,長吁一口氣:“原來是場噩夢啊……” “哼垃瞧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坪郭,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤个从,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后歪沃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗦锐,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年沪曙,在試婚紗的時候發(fā)現(xiàn)自己被綠了奕污。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡液走,死狀恐怖碳默,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情育灸,我是刑警寧澤腻窒,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布昵宇,位于F島的核電站磅崭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瓦哎。R本人自食惡果不足惜砸喻,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒋譬。 院中可真熱鬧割岛,春花似錦、人聲如沸犯助。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剂买。三九已至惠爽,卻和暖如春癌蓖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背婚肆。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工租副, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人较性。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓用僧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赞咙。 傳聞我的和親對象是個殘疾皇子责循,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容