Java
Đoạn code trên là 1 trong những ví dụ điển hình nhất về việc lặp code 1 cách không cần thiết khi lập trình Android mà bất cứ 1 ai cũng đã từng trải qua. Mặt tốt duy nhất của nó là cho chúng ta biết được nó sẽ làm gì (
findViewById()
- Tìm view trong layout bằng id này và gán với trường tương ứng) tuy nhiên với những người đã code Android dù sẽ chỉ 1 thời gian ngắn cũng sẽ rất quen với hàm này và dần dần việc gọi nó quá nhiều sẽ làm cho hàm chứa nó (ở đây là onCreate
) nhìn rất lộn xộn. 1 trong những cách để xử lý vấn đề này là cho tất cả những call đến findViewById
vào trong 1 hàm và gọi hàm đó ở onCreate
, tuy nhiên cách này cũng không thật sự giải quyết được bản chất của vấn đề mà chỉ làm code trông "gọn" hơn 1 chút mà thôi. Thử tưởng tượng khi bạn có 1 layout khá phức tạp với trên 10 view xem, viết cái hàm gán hết nó đã rất là mất thời gian rồi.
Ở bài này mình sẽ giới thiệu với các bạn 1 thư viện có thể phần nào giải quyết cái sự rườm rà của việc lập trình ứng dụng cho Android, đó là Butter Knife. Butter Knife được phát triển bởi Jake Wharton, lập trình viên chủ đạo của Square, bạn nào hay theo dõi những thư viện mã nguồn mở thì chắc chắn đã ít nhất 1 lần nghe đến tên công ty này, bởi Square sở hữu các thư viện nổi tiếng bậc nhất dành cho Android như Picasso,Retrofit hay Okhttp.
![logo.png](https://viblo.asia/uploads/images/53da161b8eea9a0e06b2a5dcea757e7a4f865867/43fd44118934dcee779f668aeeb394a85cf9ef81.png)
Thêm vào
build.gradle
trong project của bạn:compile 'com.jakewharton:butterknife:7.0.1'
Đừng quên thêm cả dòng này để chặn lint warning:
lintOptions { disable 'InvalidPackage' }
Vậy thì Butter Knife dùng để làm gì? Use case phổ biến nhất của Butter Knife là để gán view vào trường trong 1 Activity hay Fragment. Như đoạn code ở trên có thể được viết lại như sau:
Java
Ngắn và dễ nhìn hơn rất nhiều! Vậy Butter Knife đã xử lý việc gán view như thế nào? Khi bạn sử dụng Annotation
Bind
cùng với 1 id, Butter Knife sẽ tự động tìm đến id đó trong layout và cast nó sang view tương ứng. Thay vì sử dụng reflection, Butter Knife tạo ra 1 class trong quá trình compile để thực hiện việc tìm kiếm. Class đó có chứa 1 method nhìn như sau:Java
Khi MainActivity được chạy và chúng ta gọi đến hàm
ButterKnife.bind(this)
thì đoạn code trên sẽ được chạy và view sẽ được tìm, cast và gán vào trường tương ứng. Lưu ý nhỏ là bạn phải gọi ButterKnife.bind(this)
sau hàm setContentView(R.layout.activity_main)
thì Butter Knife mới hoạt động nhé! Và 1 điều nữa là các trường dùng để gán view không được có modifier là private
, do Butter Knife sẽ gọi đến các trường ấy ở 1 class khác chứ không phải trong class MainActivity.
Nhưng tác dụng của Butter Knife không chỉ có vậy. Nó còn rất hữu ích trong nhiều trường hợp khác như:
1. Gán resource
Butter Knife cho phép chúng ta gán resource một cách trực tiếp sử dụng các annotation như
@BindString
,@BindDimen
hay @BindDrawable
,... Bạn chỉ cần có id đúng là xong:Java
2. Sử dụng với ViewHolder
Với sự ra đời của
RecyclerView
, có lẽ việc sử dụng ViewHolder
pattern đã trở nên quen thuộc với tất cả các lập trình viên Android. Giống như đối với Activity hay Fragment, Butter Knife cũng giúp chúng ta tránh việc phải viết các hàm tìm kiếm view như sau:Java
3. Gán các listener
Butter Knife cung cấp cho chúng ta các annotation cần thiết để bind những listener phổ biến nhất trong Android. Ví dụ cách sử dụng:
Java
Ngoài
@OnClick
chúng ta còn có thể dùng- @OnLongClick
- @OnPageChange
- @OnTextChanged
- @OnTouch
- @OnItemClick
- @OnItemLongClick
- @OnItemSelected
- @OnCheckedChanged
4. Gộp View vào 1 List hoặc Array
Java
5. Apply thuộc tính vào tất cả các View trong List
Bạn có thể set 1 thuộc tính (ví dụ như alpha) vào 1 List các View như sau:
Java
6. Tìm đến 1 view cụ thể
Butter Knife cung cấp hàm
findById()
để bạn tìm 1 view cụ thể nào đó. Tuy nhìn hơi giống findViewById()
nhưng bạn lại không cần phải cast khi sử dụng hàm nàyJava
Trên đây chỉ là 1 trong số những tính năng mà Butter Knife đem lại. Đây là 1 thư viện đơn giản nhưng lợi ích mà nó đem lại là không phải bàn cãi, và nó đủ độ ổn định để có thể sử dụng ngay cả trong những ứng dụng lớn. Các bạn có thể tìm hiểu thêm về Butter Knife tại http://jakewharton.github.io/butterknife/
Nguồn tham khảo: https://viblo.asia/haint.fit12/posts/WkwGnWmNv75g
Nguồn tham khảo: https://viblo.asia/haint.fit12/posts/WkwGnWmNv75g
Không có nhận xét nào:
Đăng nhận xét