invalidateOptionsMenu 在片段中不起作用

2024-06-01

显示或隐藏项目ActionBar根据文本中是否有文本EditText or not.

所以,我做了以下事情

public class NounSearch extends android.app.Fragment 
{
    EditText seachEditText;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        View rootView = inflater.inflate(R.layout.nounsearchactivity, container, false);

        // Intiate EditText
        seachEditText =(EditText) rootView.findViewById(R.id.nounSearch);
        seachEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
            {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    searchResult.Entities = new ArrayList<NounModel>();
                    _currentPage = 0;
                    categoryId = -1;
                    new GetNouns().execute();
                    return true;
                }
                
                
                return false;
            }
        });

        seachEditText.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s)
            {
                // ...
            }
        
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
                    // ...
            }
        
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                getActivity().invalidateOptionsMenu();
            }
        });
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
    {
        super.onCreateOptionsMenu(menu, inflater);
        
        if (seachEditText.getText().toString().length() > 0){
            menu.findItem(R.id.action_search).setVisible(true);
        }
        else {
            menu.findItem(R.id.action_search).setVisible(false);
        }
    }
}

但是,那ActionItem永远不会出现。我怎样才能实现这个目标?


用于更新onCreateOptionsMenu在片段内你需要调用setHasOptionsMenu(true);在 - 的里面onCreate片段的方法。不然你打电话的时候是无法更新的 getActivity().invalidateOptionsMenu();

sample:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

EDIT:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
    if(seachEditText.getText().toString().length() > 0) {
        menu.findItem(R.id.action_search).setVisible(true);
    }
    else {
        menu.findItem(R.id.action_search).setVisible(false);
    }
    super.onCreateOptionsMenu(menu, inflater);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

invalidateOptionsMenu 在片段中不起作用 的相关文章

  • 对 AAssetManager_fromJava 的未定义引用

    我正在尝试使用 AAssetManager 从 Android apk 访问资源 然而 我不断得到 未定义对 AAssetManager fromJava 的引用 即使我已包含 asset manager h 和 asset manager
  • Android 中的“ffmpeg 有文本重定位”错误

    我正在构建一个 Android 视频发送应用程序 我需要在上传之前对视频进行压缩 在本例中 我选择使用 FFmpeg 的 Android 包装器 https github com hiteshsondhi88 ffmpeg android
  • 离线安装 android 很困难[已过时]

    我是非洲的一名学生 在我们的土地上 实际上存在缓慢且昂贵的互联网连接 这就是为什么每当我们听到 在线存储库 安装软件方法这个词时我们都会感到恐惧 该死 这通常意味着你必须去别处寻找 问题 如果没有将 Eclipse 连接到互联网 我无法安装
  • Android:删除整个数据库

    我想删除由我的应用程序创建的完整数据库 你知道有什么adb命令或者android语句可以做到这一点吗 您可以运行命令 adb s emulator 5554 shell or whatever port you use cd data da
  • 如何在每个项目的列表视图中实现简单的点赞按钮

    我的列表视图项目中有某些条目 我有一个简单的 喜欢按钮 不是像 Facebook 的按钮 您可以看到上面提到的屏幕截图 供参考 当我点击 喜欢 按钮的那一刻 我希望更改 喜欢 按钮的颜色 并且 喜欢 按钮的颜色应保持不变 改变了喜欢 当我再
  • 如何设置 MediaCodec 创建的编码器缓冲区大小

    我正在尝试使用 Nexus 来测试 Mediacodec API 的编码 我可以看到编码器提供的inputBuffers是119040 通过记录inputBuffers capacity 但帧的大小 即输入 是 460800 我收到错误消息
  • 更改Android TabWidget底部栏颜色

    如何更改 TabWidget 底部栏的颜色 我已经成功更改了选项卡背景颜色 但底部栏仍然是灰色 橙色 并且我在 Android 文档和源代码中找不到与此相关的任何信息 谢谢 See 启用 禁用此行 tabHost getTabWidget
  • 使用选项卡的应用程序崩溃

    我正在构建一个使用选项卡实现蓝牙 Wifi 电话和短信的应用程序 MainActivity java 文件如下所示 package com example servicesdemo import android os Bundle impo
  • 尝试在 Android Studio 上运行单元测试时出现 NoClassDefFoundError

    我正在尝试为我的 Android 应用程序创建一些简单的测试 但在运行测试时遇到了问题 当我尝试运行测试时 我不断收到 NoClassDefFound 错误 但我似乎无法弄清楚其原因是什么 如果我能有一双新的眼睛来看待这个问题 我将不胜感激
  • 通过单击 imageView 打开活动

    我正在尝试做一个ImageView打开另一个活动 public class MainActivity extends Activity Override protected void onCreate Bundle savedInstanc
  • Android架构组件导航:工具栏后退按钮缺失,后退不起作用

    我正在尝试喷气背包导航 但当我移动到新片段时无法显示导航后退按钮 导航活动 kt class NavActivity AppCompatActivity override fun onCreate savedInstanceState Bu
  • 如何在 Android 中对视图进行动画处理并让它保持在新的位置/大小?

    目前 我的 Android 应用程序中有一个视图 并且该视图正在播放帧动画 我想要动画视图以将其大小增加到 150 当我对其应用缩放动画并且缩放动画完成时 我希望查看器在活动生命周期的其余部分中保持新的尺寸 不幸的是 现在当放大动画完成时
  • 通过选中/取消选中 CheckBoxPreference 来启动/停止服务

    我正在编写一个通过选中或取消选中来启动或停止服务的应用程序CheckBoxPreference我试图找到一些信息 例如示例代码或教程 但我还没有找到 如何通过选中或取消选中来启动或停止服务CheckBoxPreference这是在Prefe
  • 在 webview 片段中实现后退按钮

    我想在我的应用程序中实现后退按钮 我正在使用每个片段显示不同的网络视图 现在 如果我按后退按钮 无论我在哪里 它都会关闭应用程序 我希望它能像浏览器一样返回 我有我的MainActivity java fragment1 java等直到fr
  • 使用 ADB 更改 Android 壁纸?

    我想知道是否可以使用我的笔记本电脑从 ADB 更改 Android 壁纸 我不知道是否存在任何命令 或者我是否需要将图片复制到文件夹或编辑文本文件 如果可以的话 我需要通过 ADB 解决这个问题 谢谢大家 您只需要启动正确的壁纸设置意图 由
  • 发布 apk 中的“来源不明”

    我的调试 APK 中的所有内容都运行良好 但是 当我导出 APK 并安装它时 一切正常 直到我调用引用的库 E AndroidRuntime 32571 at com znood znoodapp ShowResultsActivity a
  • 我可以通过编程方式选择 Android 布局文件夹吗?

    我正在构建一个 Android 应用程序 它使用不同的布局文件夹 即 Large xlarge 等 根据屏幕尺寸调整大小 唯一的问题是 我想为用户提供一种在小屏幕布局和大屏幕布局之间切换的方法 以防他们拥有无法识别 xlarge 标签的前蜂
  • 如何暂时禁用Android按钮[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我想暂时禁
  • 更新 android chrome 版本 65 后,应用程序无法运行,Sencha touch 和 cordova android

    更新 chrome 版本 65 后 应用程序在点击某些点击事件时再次显示启动屏幕 它是 Sencha touch 和 Cordova android 的混合应用程序 编辑 这是一个已知的 chrome 65 错误 https bugs ch
  • 如何从双 SIM 卡设备获取两个电话号码?

    我知道如何获取用户的电话号码 但假设用户的手机是双 SIM 卡 有什么办法可以得到两个电话号码吗 目前我只能获取有效的电话号码 如果电话号码确实存储在SIM卡中 那么您可以使用subscriptionmanager API https de

随机推荐