Kotlin Android Fragment, Activity, & Dialog Fragment

0
Bài này thuộc phần 3 của 5 phần trong series Kotlin Android cơ bản

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.

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.

Kotlin Android cơ bản: Activity, Fragment & Dialog Fragment

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é.

Xem tiếp các bài trong Series
Phần trước: Sử dụng những API cơ bản trong Android với KotlinPhần kế tiếp: Tìm hiểu Higher-Order Functions và Lambda trong Kotlin

Bình luận. Đặt câu hỏi cũng là một cách học

avatar
  Theo dõi bình luận  
Thông báo