12/08/2018, 15:59

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

Đâ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 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 đã ...

  • Đâ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 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) }
...
}
  • 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 
...
}
  • 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 .

-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()}
  • 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
0