打造屬於你自己的BaseAdapter
轉載請註明出處:http://blog.csdn.net/KevinsCSDN/article/details/51747631
今天看到隊友寫的Adapter,這麼多重複的程式碼,這也能忍???反正我是不能忍,於是動手將ListView的adapter封裝了一下:
1. 構造方法不用傳入ArrayList的引用,我在內部已經new啦;
2. getCount()、getItem()、getItemId這種活就不要再幹啦;
3. getView獲取ViewHolder的過程你也不用幹啦;
4. 至於add、addAll,remove,removeAll這種操作也不再需要notifyDataSetChanged了。
你需要做的只是:
1. 繼承BaseListAdapter,內部建立繼承BaseListAdapter.ViewHolder的靜態內部類YourAdapter.ViewHolder,然後將元素型別和這個ViewHolder傳進泛型。
2. 重寫getLayoutResId,傳入佈局檔案
3. 如果使用ButterKnife,將生成的ViewHolder與建立的ViewHolder整合
4. 重寫onBindViewHolder,返回ViewHolder的例項
5. onBindViewHolder,將資料與View繫結
廢話不多說,直接上程式碼:
/**
* Caused by Kevin at 2016/6/23
*/
public abstract class BaseListAdapter<T, VH extends BaseListAdapter.ViewHolder> extends BaseAdapter {
protected Context context;
protected List<T> list;
public BaseListAdapter(Context context, List<T> list) {
this.context = context;
list = new ArrayList<>();
}
public BaseListAdapter(Context context, List<T> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list != null ? list.size() : 0;
}
@Override
public T getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
VH holder;
if(convertView==null){
convertView = LayoutInflater.from(context).inflate(getLayoutResId(),parent,false);
RelayoutUtil.relayoutViewHierarchy(convertView);
holder = onCreateViewHolder(convertView);
convertView.setTag(holder);
}else {
holder = (VH) convertView.getTag();
}
T t = list.get(position);
bindViewHolder(holder,t);
return convertView;
}
public void add(T t){
list.add(t);
notifyDataSetChanged();
}
public void addAll(Collection<? extends T> collection){
list.addAll(collection);
notifyDataSetChanged();
}
public void remove(T t){
list.remove(t);
notifyDataSetChanged();
}
public void removeAll(Collection<? extends T> collection){
list.remove(collection);
notifyDataSetChanged();
}
public abstract int getLayoutResId();
protected abstract VH onCreateViewHolder(View convertView);
public abstract void bindViewHolder(VH holder, T t);
public static class ViewHolder{
public ViewHolder(View view) {
}
}
}
繼承之後是這樣,看一下是不是省了很多程式碼?
/**
* Caused by Kevin at 2016/6/23
*/
public class YourAdapter extends BaseListAdapter<YourEntity, YourAdapter.ViewHolder> {
public YourAdapter(Context context) {
super(context);
}
@Override
public int getLayoutResId() {
return R.layout.adapter_yours;
}
@Override
protected ViewHolder onCreateViewHolder(View convertView) {
return new ViewHolder(convertView);
}
@Override
public void bindViewHolder(ViewHolder holder, YourEntity yourEntity) {
holder.avatarImage.setImageUri(yourEntity.getImageUri());
holder.nickText.setText(yourEntity.getNick());
}
static class ViewHolder extends BaseListAdapter.ViewHolder {
@Bind(R.id.avatar_image)
SimpleDraweeView avatarImage;
@Bind(R.id.nick_text)
TextView nickText;
ViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
在Activity裡這樣用,是不是很優雅:
ListView mListView;
YourAdapter adapter = new YourAdapter(this);
mListView.setAdapter(adapter);
ArrayList<YourEntity> list = getYourEntityList();
adapter.addAll(list)
相關推薦
打造屬於你自己的BaseAdapter
轉載請註明出處:http://blog.csdn.net/KevinsCSDN/article/details/51747631 今天看到隊友寫的Adapter,這麼多重複的程式碼,這也能忍???反正我是不能忍,於是動手將ListView的adapter封裝了
打造屬於你自己的instagram!
簡介 專案地址 打造屬於你自己的instagram! 技術棧 react全家桶 typescript ant design egg.js mysql 前後端分離開發模式,前端專案與後端專案屬於不同的工程 // instagram/client 前端工
基於RxJava2的RxBus,打造屬於你自己的EventBus
前言 由於最近在學RxJava2,同樣避免不了使用Rxbus,但是RxJava1到RxJava2還是有很大的變化的,例如:在 2.x 中 Observable 不支援背壓了,將用一個全新的 Flowable 來支援背壓,Consumer和BiConsumer對
Oracle APEX 系列文章3:在阿里雲上打造屬於你自己的APEX完整開發環境 (安裝CentOS, Tomcat, Nginx)
引言 在這一章節裡,我們將一起動手安裝CentOS 7作業系統、Tomcat以及Nginx,併為後面的安裝做一些初始化設定。 安裝配置CentOS 7 在阿里雲控制檯購買並啟動CentOS 之前說過,我們選擇阿里雲作為雲提供商。註冊
android Toast大全(五種情形)建立屬於你自己的Toast
right 其它 activity make div ins case tco title 搬運而來,如有雷同。絕非意外! Toast用於向用戶顯示一些幫助/提示。以下我做了5中效果,來說明Toast的強大,定義一個屬於你自己的Toast。
屬於你自己的自動化框架思路
基礎 學什麽 梳理 程序員 一個 維護 das selenium 去百度 前言 說起自動化,最先想到的應該就是一些編碼技術了。 比如至少會一種語言:java、python、js、c++、vb、等等; 用來設計測試用例和腳本框架,比如至少熟悉一種框架或工具:
私人訂制——屬於你自己的Linux
war sta /usr 移植 工作 ble 自由 lib64 guess 一、前言 Linux操作系統至1991年10月5日誕生以來,就其開源性和自由性得到了很多技術大牛的青睞,每個Linux愛好者都為其貢獻了自己的一份力,不管是在Linux內核還是開源軟件等方面,
感覺logo不給力? Python十分鐘制作屬於你自己的個性logo
python自學 Python項目實戰 Python詞雲 歡迎大家訂閱公眾號:Python從程序猿到程序員詞雲的使用相信大家已經不陌生了,使用很簡單,直接調用wordcloud包就可以了。它的主要功能是根據文本詞匯和詞匯頻率生成圖片,從中可以直觀的看出各個詞匯所占比重。最近正好想做一個人的logo
在Linux下搭建屬於你自己的git伺服器(MAC版)
環境說明 本地mac系統,一般都有git程式安裝(如果沒有則使用:brew install git) 伺服器版本是ubuntu-14.04 直入主題 使用mac終端遠端連線linux伺服器(命令:ssh [伺服器ip], 之後輸入伺服器密碼)預設都是ro
新媒體內容創作的3個超實用萬能開頭金句!打造屬於你的10萬+創意素材 | 黎想
大家好!我是藝形藝意工作室創始人,騰訊網、百度網、今日頭條、搜狐網等網站知名專欄作者,《新媒體推廣運營實戰大全》作者黎想,百度單篇推文10萬+。曾結合親身經理給大家分享一位優秀的新媒體運營人員如何通過"四步引爆法"策劃出引爆眾人蔘與的推廣活動等文章,引發了眾多新媒體從業者的共鳴。
定製屬於你自己的ViewEngine(一套邏輯多套UI)
ASP.NET MVC出來這麼久了,心中卻又很多的疑惑:為什麼所有的View都要放在Views目錄下? 為什麼Shared資料夾下面的頁面可以被共享? 為什麼Page既可以是*.cshtml,也可以是*.aspx? 其實上面的幾個問題歸結起來都是檢視引擎的功效。 在傳統的ASP.NET中,可能還沒有
我用小幫軟體幫你定製屬於你自己的專利管理應用工具....專利定製
你還在用Excel表格管理的各種專利資訊嗎? 為了儲存一些專利的資訊,如申請號、申請時間、名稱、申請人等,你勤奮地手工輸入,一個欄位一個欄位切來換去,雖然打字很快,但工作效率並不高,繁瑣費時間。 有一款能夠合理的管理自有專利的軟體工具,該多好! 你的問題,博為小幫軟體機器人都可以解
生產力:編寫屬於你自己的日誌分析器(3)
這一節講解如何擴充套件Scintilla,用來在右側滾動條區域增加各種標記(不同形狀和顏色)。這種在滾動條上顯示標記的做法在一些主流編輯器上很流行,比如XCode用紅色標記編譯error,用黃色標記編譯warning(參見下圖右側滾動條區域): Scintilla本並不
動手製作屬於你自己的WIN PE3.0
5、提交儲存映像修改命令:Dism /unmount-Wim /MountDir:\mywinpe\mount /Commit這條命令執行,要等一會兒,執行結果如下圖:執行完後,mount目錄會被自動清空,相當於又“壓縮”回去。三、生成ISO映像根據windows PE使用者指南介紹,如果是製作U盤版的WIN
從零開始做遠控 簡介篇 做一個屬於你自己的遠控
做一個屬於你自己的遠控:先對大家說句抱歉,上次答應帶大家一起做遠控但因為我的個人原因讓課程中途斷了,這次我答應大家一定要把這教程完成。你在看著課程之前你必須掌握c/c++,qt,win32 api。不用精通,懂就可以了。先向你們簡單講解下什麼叫遠端控制,就是在別人不知情的情況
利用rpmbuild打包定製屬於你自己的RPM包
這個是自己寫在CSDN上寫的第一個技術部落格, 因為最近自己在研究rpm打包. 今天把它分享出來哈~~ rpm的優勢就是安裝和後期升級方便快捷,無需再次手動編譯原始碼。節省很多時間。. 這裡已Nginx
Android網路程式設計之搭建一個屬於你自己的簡單servlet服務端。
部署一個自己的一個簡單servlet服務端有以下幾步: 1.jdk的安裝就不說啦。這裡我們將演示的是在Eclipse裡面釋出專案,要想釋出一個專案,首先我們要有一個tomcat,去官網下載或者百度都可以,下載好之後解壓到任意目錄,然後再eclipse裡面進行配
使用XAMPP和Wordpress搭建一個屬於你自己的網站
你好,從今天開始,我將為大家帶來一些我學習SEO和建站的免費教程,今天為大家帶來的是如何用XAMPP搭建一個屬於你自己的網站。來到這裡,可以說很多在百度上已經過時了的資料需要總結的資料這裡都有,你只要按照我的教程來好的廢話不多說了現在開始教程。 首先我們要明白一些問題
如何建立屬於你自己的域名郵箱
作者:潘佳宇 出處:騰雲閣文章 ------------------------------------------------------------- 1.開啟騰訊雲->域名管理->域名註冊->註冊了一個域名網址 3.建立域
自定義瀏覽器滾動條的樣式,打造屬於你的滾動條風格
前段時間,到網上找素材時,看到了一個很個性的滾動條式,開啟Chrome的除錯工具看了一下,發現不是用JavaScript來模擬實現的,覺得有必要折騰一下。於是在各大瀏覽器中對比了一下,發現只用Chrome適用,也就是說這個用的是Chrome的私有CSS屬性。便百之谷之後,發現原來不僅僅只用Chrome,其它的