TL; DR
Sử dụng android.support.v7.widget.Toolbar
và chỉ cần làm:
toolbar.inflateMenu(R.menu.my_menu)
toolbar.setOnMenuItemClickListener {
onOptionsItemSelected(it)
}
Thanh công cụ độc lập
Hầu hết các giải pháp được đề xuất như setHasOptionsMenu(true)
chỉ hoạt động khi Activity gốc có Thanh công cụ trong bố cục của nó và khai báo nó thông qua setSupportActionBar()
. Sau đó, các mảnh vỡ có thể tham gia vào nhóm thực đơn của ActionBar chính xác này :
Fragment.onCreateOptionsMothy (): Khởi tạo nội dung của menu tùy chọn tiêu chuẩn của máy chủ Fragment.
Nếu bạn muốn một thanh công cụ độc lập và menu cho một Fragment cụ thể bạn có thể làm như sau:
menu_custom_fragment.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_save"
android:title="SAVE" />
</menu>
custom_fragment.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
...
CustomFragment.kt
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(layout.custom_fragment, container, false)
val toolbar = view.findViewById<Toolbar>(R.id.toolbar)
toolbar.inflateMenu(R.menu.menu_custom_fragment)
toolbar.setOnMenuItemClickListener {
onOptionsItemSelected(it)
}
return view
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.menu_save -> {
// TODO: User clicked the save button
true
}
else -> super.onOptionsItemSelected(item)
}
}
Vâng, nó thật dễ dàng. Bạn thậm chí không cần ghi đè onCreate()
hoặconCreateOptionsMenu()
.
PS: Điều này chỉ hoạt động với android.support.v4.app.Fragment
và android.support.v7.widget.Toolbar
(cũng chắc chắn sử dụng AppCompatActivity
và một AppCompat
chủ đề trong của bạn styles.xml
).