+3

Những điều nên biết khi Code Kotlin cho Android (P2)

Giới Thiệu

  • Đây là phần 1 nếu bạn nào muốn đọc nó .
  • Tiếp theo mình sẽ giới thiệu thêm vài thứ mà mình học được .

Lazy

  • lazy là 1 hàm sử dụng lambda expression để trả về 1 kiểu Lazy<T> nào đó. Khi chạy lần đầu tiên nó sẽ sử dụng Lazy<T> để truyền vào cho biến . Các lần sau nó sẽ trả lại biến đã được truyền vào trước đó.
  • Vậy sử dụng lazy để làm gì ? Việc sử dụng lazy giúp chúng ta có thể tiết kiệm được bộ nhớ và bỏ qua việc khởi tạo biến cho đến khi nó được yêu cầu.
  • Đây là ví dụ về việc sử dụng lazy :
class GroupFragment : BaseFragment() {
private val mGroupFragmentAdapter : GroupFragmentAdapter by lazy { GroupFragmentAdapter(this) }
...
}

Lateinit

  • Sử lateint nghĩa là chúng ta xác định rằng thuộc tính đó không phải là 1 biến có thể null, nó sẽ được gán giá trị tại 1 thời điểm nào đó.Nếu biến được gọi trước khi được gán giá trị, nó sẽ ném ra 1 ngoại lệ (excepiton) .
  • Ví dụ :
class GroupFragment : BaseFragment() {
private lateinit var mGroupFragmentAdapter : GroupFragmentAdapter 
...
}

Implement On Click Trên RecyclerView

  • Hầu hết các ứng dụng điều có sử dụng RecyclerView để hiển thì 1 danh sách nào đó.Trong kotlint sử dụng lambda expression để code trong gắng gọn hơn.
  • Trong class adapter của chúng ta, ở phần constructor bỏ thêm sự kiện click vào
class GroupFragmentAdapter(context: Context, val itemClickListener: (String) -> Unit) :
    BaseRecyclerViewAdapter<GroupFragmentAdapter.ItemViewHolder>(context) {
    .....
    }
  • Ở đây val itemClickListener: (String) -> Unit) chính là sự kiện click , bạn có thể thay (String) thành 1 biến bất kỳ.
  • Để các Item View có thể nhận được sự kiện click thì chúng ta phải set cho nó như sau :
  inner class ItemViewHolder(view: View,
      val itemClickListener: (String) -> Unit) : RecyclerView.ViewHolder(view) {
    fun bindData(name: String) {
      with(name) {
        itemView.setOnClickListener { itemClickListener(this) }
      }
    }
  }
  • Ở class khởi tạo adapter của chúng ta, thêm sự kiện để khi click vào các item sẽ làm 1 việc gì đấy, chẳng hạn như 1 cái Toast
private val mGroupFragmentAdapter: GroupFragmentAdapter by lazy {
    GroupFragmentAdapter(context) {
      Toast.makeText(context,"Clicked !",Toast.LENGTH_SHORT).show()
    }
  }
  • Chúng ta chỉ cần truyền adapter vào Recyclerview là xong .

Sử dụng let

-Trong code java khi check null chúng ta thường làm như sau :

 if(mName != null){
  someThing()
 }

-Kotlin đã tối ưu việc trên bằng từ khóa let

 mName?.let{someThing()}

Kết Thúc

  • Cảm ơn các bạn đã đọc bài của mình ,hy vọng sau khi đọc xong các bạn đã có 1 nền tảng nhất định để code kotlin cho Android

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí