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