Bài viết trước mình đã giới thiệu các gọi các API cơ bản trong android bằng Kotlin. Chúng ta sẽ tiếp nghiên cứu xem cách sử dụng Android Activity, Kotlin Android Fragment bằng Kotlin như thế nào nhé.
Cá nhân thì mình thấy cú pháp Kotlin khá là gọn. Nên nếu bạn đã quen với các ngôn ngữ kiểu script như Javascipt thì việc nhớ và hiểu Kotlin rất nhanh.
Nội dung chính của bài viết
Android Fragment bằng Kotlin
Trong bài viết này, mình sẽ hướng dẫn các bạn các tạo Dialog fragment và fragment từ một Activity.
Chuyển sang một Activity khác từ Activity sử dụng Intent
Về nguyên tắc thì để start một activity vẫn như cũ, không khác gì so với viết bằng Java. Có khác chăng chỉ là systax thui 🙂
val i = Intent(this, MainActivity::class.java) startActivity(i) finish()
Hiển thị một Dialog Fragment trên Activity
Đầu tiên, bạn tạo một dialog bằng kế thừa từ lớp DialogFragment.
class DialogFrag : DialogFragment() { private var text: TextView? = null private var array = ArrayList<String>() private var rv: RecyclerView? = null override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View { var view: View? = inflater?.inflate(R.layout.activity_main2, container, false) return view!! } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setStyle(STYLE_NORMAL, R.style.AppTheme) } }
Để hiển thị dialog, trong MainActivity bạn tạo một instance của class DialogFrag rồi gọi hàm show()
.
Ở ví dụ này thì dialog sẽ hiển thị khi người dùng click vào một button.
bt?.setOnClickListener() { view -> DialogFrag().show(fragmentManager, "dialFrag") }
Chú thích:
- Bạn có thấy đoạn code khó hiểu không? Nếu bạn đã quen với java thì càng khó hiểu. Đoạn code bắt sự kiện click của button sử dụng một khái niệm khá mới đó là lambda function. Chúng ta gọi hàm anonymous thay vì thông qua inner class giống như Java.
- Hàm getters và setters không được sử dụng. Thay vào đó chúng ta sử dụng properties của class. Như ở ví dụ trên, thay vì gọi hàm
getFragmentManager()
thì chúng ta sử dụng fragmentManager.
>> Đọc thêm về xử lý sự kiện trong Android: Xử lý sự kiện trong Android (Event Listeners) bằng Kotlin
Mở một Kotlin Android Fragment từ Activity
Chúng ta tạo một layout cho fragment như sau:
<FrameLayout android:id="@+id/frame" android:layout_width="match_parent" android:layout_height="match_parent"/>
Tạo một fragment bằng cách kế thừa từ Fragment class.
class Fragment1 : Fragment() { override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view: View? = inflater?.inflate(R.layout.activity_main2, container, false) return view } }
Từ Activity, để gọi một fragment thì làm như sau:
fragmentManager.beginTransaction()?.replace(R.id.frame, Fragment1() as Fragment)?.addToBackStack("frag")?.commit() //chaining
Chú thích: Bạn thấy cùng một dòng code trên sử dụng rất nhiều toán tử(?). Đây được gọi là chaining(chuỗi). Nếu bất từ toán tử (?) nào trả về NULL toàn bộ biểu thức sẽ trả về NULL. Đây có lẽ một nhược điểm của Kotlin.
Tạm kết
Như vậy, mình đã chia sẻ với các bạn cách gọi Dialog Fragment và Fragment từ Activity bằng Kotlin trong Android.
Qua đó, bạn cũng có thêm một kiến thức mới đó là lambda function.
Bài viết sau chúng ta sẽ tiếp tục tìm hiểu Kotlin trong Android khi làm việc với Adapter. Riêng với Adapter thì cách viết bằng Kotlin gần giống với Java, chỉ thay đổi đôi chút thôi.
Các bạn đón đọc nhé.
Bình luận. Cùng nhau thảo luận nhé!