- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个可以包含多个 fragment 的 Activity 。每个 fragment 都可以在 ActionBar 中有自己的菜单项。到目前为止这工作正常,每个项目都是可点击的并执行所需的操作。
我的问题如下。在 MainActivity 中,我声明了以下行以拦截对 ActionBar 的 HomeIcon 的调用:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
clearBackStack();
setHomeFragment();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我在 Activity 中声明了它,因为我希望每个 Fragment 都应该调用它,这样我就不必在每个 fragment 中捕获 android.R.id.home 的情况。
在一个 fragment 中,我使用了 setDisplayHomeAsUpEnabled(true),这样我就得到了 ActionBar 图标左侧的小箭头。当在此 fragment 中单击 HomeIcon 时,我不想设置 HomeFragment,我想设置最后显示的 fragment 。所以我有一个 onOptionsItemSelected - fragment 中的方法:
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
setLastFragment();
return true;
...
然而,这并不像我希望的那样工作。首先调用 Activity 的 onOptionsItemSelected,捕获 MenuItem 并重定向到 HomeFragment。使用在其他 fragment 中声明的其他 MenuItems,我可以检查是否看到相同的行为。首先调用 Activity,不捕获 MenuItem(默认情况),然后重定向到 super.onOptionsItemSelected(item)。
看来 Android 处理菜单点击的方式就是这种情况。第一个 Activity ,然后 fragment 。有没有办法改变这个?我不想将 android.R.id.home-case 放在每个 fragment 中并在那里处理。有没有更好的方法来做到这一点?
最佳答案
我刚遇到这个问题,我用下面的代码解决了这个问题。在 Activity 的 onOptionsItemSelected
函数中,添加:
if (id == android.R.id.home){
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.container);
if(null != currentFragment && currentFragment.onOptionsItemSelected(item)){
return true;
}
}
在 fragment 的onOptionsItemSelected
方法中,您处理相应的事情。这样,如果 fragment 对菜单项有任何事情要做,它就会去做并返回 true 以停止任何其他进程。而如果fragment与这个item没有任何关系,它会返回false或者调用super.onOptionsItemSelected方法最终可能会返回false让其他人处理。
关于android - Activity 中的 OnOptionsItemSelected 在 fragment 中的 onOptionsItemSelected 之前被调用。其他方式可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16679917/
对于 onOptionsItemSelected 方法,只有在单击项目时才会调用此方法,对吗?如果在该 Activity 中单击了一个项目,但由于某些奇怪的原因,程序员没有 if 语句来检查该项目的
我有一个可以包含多个 fragment 的 Activity 。每个 fragment 都可以在 ActionBar 中有自己的菜单项。到目前为止这工作正常,每个项目都是可点击的并执行所需的操作。 我
我对这段代码感到困惑,我有 6 个菜单项,每个菜单项我希望它在 Web View 上加载不同的网页,但我看不到我在哪里可以说当选择第 3 项时执行此操作,有人可以帮忙吗? @Override
我的 fragment 上有这个调用 @Override public boolean onOptionsItemSelected(MenuItem item) { Toast
使用 Android Studio,我正在为我的应用程序创建设置(这是我第一次这样做)。我遇到了 onOptionsItemSelected 问题,我不知道如何继续。这是我的 LogCat: FATA
我有一个实现 onCreateOptionsMenu 方法的顶级 TabHost。我希望子 Activity (选项卡内的子 Activity )能够通过 onOptionsItemSelected
如何避免双击我的示例,任何解决方案? @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getI
我对 public boolean onOptionsItemSelected(MenuItem item) 有问题。 我的代码: public boolean onOptionsItemSelect
我的操作栏上有两个按钮,一个注销按钮和一个创建新消息按钮。但是,如果我单击创建新消息按钮(什么都不应该发生),它会让我退出。我的代码设置为它应该做的。有什么建议吗? @Override pub
我是 Android 开发的新手。 在我的 MainActivity.java 文件中,我声明了一个 onOptionsItemSelected(MenuItem menu) 方法,允许用户在当前 M
我遇到过这样一种情况,我需要为一个项目的子菜单实现 onOptionsItemSelected 监听器。菜单 xml 文件如下所示:
我不确定这是否重复,我尝试过的可能的补救措施无效。 (下面会提到) 我目前正在为我正在做的项目使用 Theme.AppCompat.NoActionBar 并且正在使用 android.support
我在 Android 中的一项 Activity 中有一个抽屉导航。我还在同一 Activity 的操作栏中添加了几个操作按钮和一个操作溢出。现在,问题在于处理抽屉导航项目、操作按钮和操作溢出菜单的选
我已经为我的数据库类创建了一个选项菜单。启动选项菜单后,我想通过单击指定按钮进行所需的 Activity 。 但问题是,如果我单击任何选项,我将被定向到 MainMenu.class。任何想法为什么会
我是 Android 的新手,如果我的问题看起来很简单,我很抱歉。我昨晚整晚都在查找它,但找不到解决方案(这让我觉得我可能在我试图实现的目标上存在根本缺陷)。 基本上,我试图从 onOptionsIt
我正在使用我的 fragment 处理返回功能。我使用操作栏作为返回按钮,但函数 onOptionsItemSelected 不起作用(甚至可能未调用该函数) 此代码在我的 FragmentActiv
我的操作栏中有一个菜单项列表。每个项目点击应该触发不同的方法。但是永远不会调用 onOptionsItemSelected。 这是在 MainActivity 中定义 actionbar 的方式: p
我有一个带有两个按钮的 onOptionsItemSelected 方法,我可以通过单击其中一个按钮来更改子项的值。 一个按钮是“完成”,另一个是“进行中”。 我单击完成按钮,它正确地更改了子值,然后
我使用 Sherlock 的操作栏。我正在尝试将其实现到我的应用程序中。但似乎我错过了一些让它发挥作用的东西。请检查我的代码。当我点击操作按钮时,我的应用程序没有做任何事情。下面是我的代码和我的 xm
我目前正在开发一款 Android 应用。我想使用操作栏中的应用程序图标导航到“主页” Activity 。我继续阅读 this所有需要做的就是添加一个 onOptionsItemSelected 并
我是一名优秀的程序员,十分优秀!