首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工具栏片段对选项站点的选择不叫kotlin,几种解决方案有什么建议吗?

问工具栏片段对选项站点的选择不叫kotlin,几种解决方案有什么建议吗?
EN

Stack Overflow用户
提问于 2019-09-21 16:11:59
回答 3查看 3.9K关注 0票数 4

我尝试在片段中控制onclick的选项菜单时迷路了。有太多的解决方案,我甚至不知道从哪里开始。

我看到一些地方,人们告诉我们使用NavController,其他人告诉我们在活动和片段中都使用onOptionsItemSelected,并覆盖您需要的内容。最重要的是,我们有了甚至不需要膨胀的androidx.appcompat.widget.Toolbar,只需在XML文件中使用app:menu=就可以了,但是我如何监听点击呢?

代码语言:javascript
复制
<androidx.appcompat.widget.Toolbar
            app:menu="@menu/menu_fragment_main">

我让它在活动中工作,但后来不得不使用片段,并陷入了这种混乱,我只想让菜单像在活动中一样工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-22 14:51:19

代码语言:javascript
复制
val toolbar = fragmentInflater.findViewById<androidx.appcompat.widget.Toolbar>(R.id.toolbarMainActivity)
        (activity as AppCompatActivity).setSupportActionBar(toolbar)

这解决了问题,现在有点累了,但我会评论一下为什么会发生这种情况。

我认为这是xml中的工具栏,androidx,错误的工具栏导入非android x等等的混合。

票数 1
EN

Stack Overflow用户

发布于 2019-09-21 16:18:20

您需要在片段onCreate()方法中调用setHasOptionsMenu:

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

下面是如何扩展菜单并响应单击:

代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
  
    case R.id.refresh:
        //Respond to click
        break;
    }
    return true;
}

这是你的menu.xml:

代码语言:javascript
复制
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/refresh" android:title="Refresh" android:icon="@drawable/ic_action_refresh" />
</menu>
票数 5
EN

Stack Overflow用户

发布于 2020-04-26 02:25:54

在样例中,创建了一个连接到AboutMe活动/片段的overflow_menu。它使用导航方向转到关于我的页面-

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:android="http://schemas.android.com/apk/res/android">
   <item
     android:id="@+id/about"
     android:title="@string/about" />
</menu> 

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    setHasOptionsMenu(true)
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    inflater.inflate(R.menu.overflow_menu, menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.about -> navigateAbout(item)
    }
    return super.onOptionsItemSelected(item)
}

private fun navigateAbout(item: MenuItem) {
    view!!.findNavController()
        .navigate(TitleFragmentDirections.actionTitleFragmentToAboutFragment())
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58038440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档