作為一名android開發,是不是經常厭煩了大量的findviewbyid以及setonclicklistener**,而butterknife是乙個專注於android系統的view注入框架,讓你從此從這些煩人臃腫的**中解脫出來。先來看一段**示例說明下butterknife是如何簡化**的:
注意:如果你是使用的eclipse引用該library,你需要參考這裡eclipse configuration做一些配置,否則會執行出錯。
class exampleactivity extends activity
}
而用butterknife之後的**是這樣的:
class exampleactivity extends activity
}
是不是非常簡潔易用?下面就來系統的介紹下butterknife的用法。
支援 activity 中的 view 注入
支援 view 中的 view 注入
支援 view 事件**函式注入
目前支援如下事件**函式:
下面來看一些注入的示例**:
下面來看一些注入的示例**:
class exampleactivity extends activity
}
public class fancyfragment extends fragment
}
public class myadapter extends baseadapter else
holder.name.settext("john doe");
// etc...
return convertview;
} static class viewholder
}}
下面是幾種注入**函式的方法示例:
// 帶有 button 引數
@onclick(r.id.submit)
public void sayhi(button button)
// 不帶引數
@onclick(r.id.submit)
public void submit()
// 同時注入多個 view 事件
@onclick()
public void pickdoor(doorview door) else
}
如果需要在 介面 銷毀的時候,把注入的 view 設定為 null, 則可以用 reset 函式:
public class fancyfragment extends fragment
@override void ondestroyview()
}
另外 還支援 可選的 view 注入,如果該 view 沒有,就沒有吧:
@optional @injectview(r.id.might_not_be_there) textview mightnotbethere;
@optional @onclick(r.id.maybe_missing) void onmaybemissingclicked()
還有兩個 findviewbyid 函式來簡化查詢 view 的方式,如果上面都滿足不了你的需求,你可以用用他們:
view view = layoutinflater.from(context).inflate(r.layout.thing, null);
textview firstname = views.findbyid(view, r.id.first_name);
textview lastname = views.findbyid(view, r.id.last_name);
imageview photo = views.findbyid(view, r.id.photo);
最後,如果你是用android studio來作為ide的話,那麼有乙個butterknife的外掛程式android-butterknife-zelezny, 該外掛程式可以讓你手動生成上述注入**,從此讓自己成為乙個更懶惰的程式設計師,上張截圖吧。
感謝分享:
依賴注入之Dagger2框架在工程中的使用
在介紹dagger2之前,了解一下使用dagger2的背景 一般情況下,例項man包含到例項car,則例項man依賴例項car。如下圖1 這種直接依賴的情況存在不好的情況,若car建構函式變化,則需要直接修改man類。使用依賴注入用於實現控制反轉的常用方式。控制反轉的基本思想是 借助 第三方 實現具...
SQL防注入SqlParameter的使用
概述 一般來說,在更新datatable 或是dataset 時,如果不採用 sqlparameter 那麼當輸入的 sql語句出現歧義時,如字串中含有單引號,程式就會發生錯誤,並且他人可以輕易地通過拼接 sql語句來進行注入攻擊。目的 防止sql 注入被攻擊。首先,先寫乙個沒有 sqlparame...
ASIHTTPRequest框架的簡單使用
asihttprequest是一款及其強勁的http訪問開源專案。讓簡單的api完畢複雜的功能,如 非同步請求,佇列請求,gzip壓縮。快取,斷點續傳,進度跟蹤,上傳檔案。http認證。在新版本號中,還增加了object c閉包block的支援,讓我們的 更加精簡靈活。依賴的5個庫 cfnetwor...