首页 > 解决方案 > 必须 onCreateOptionsMenu 成为每个活动的实现吗?

问题描述

当我有一个包含多个活动的应用程序并希望有一个全面的选项菜单时:我是否必须在每个活动中覆盖 onCreateOptionsMenu 方法? 或者这可以成为中心化的吗?

标签: androidandroid-layout

解决方案


您可以防止样板代码创建所有活动都继承的通用活动。

abstract class CommonSaveActivity : Activity() {
    @CallSuper
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        super.onCreateOptionsMenu(menu)
        menuInflater.inflate(R.menu.common_save_action_menu, menu)
        return true
    }

    @CallSuper
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.saveAction -> {
                // TODO: handle common save action
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }
}

class ActivityA : CommonSaveActivity()

class ActivityB : CommonSaveActivity()

class ActivityC : CommonSaveActivity() {
    // You can have the common save menu AND your 
    // activity specific menu at the same time in UI.
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // NOTE: if you call super.onCreateOptionsMenu(menu) AFTER 
        // menuInflater.infalte(..) line, then the order of menu 
        // items will be different.
        super.onCreateOptionsMenu(menu)
        menuInflater.inflate(R.menu.activity_c_menu, menu)
        return true
    }

推荐阅读