操作栏 Sherlock SearchView 单击时不会展开

2023-11-23

我有一个 Sherlock 片段活动,我使用片段寻呼机适配器从中设置不同的 Sherlock 片段。

现在,为了在每个片段中显示搜索视图,我已将此方法放置在片段的 onCreate 中:

此方法将在片段的 ActionBar 中显示菜单项。

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

我现在还设置了 onCreateOptionMenu() 像这样::

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{
    super.onCreateOptionsMenu(menu, inflater);

    inflater.inflate(R.menu.menu, menu);
    final MenuItem searchItem = menu.findItem(R.id.menu_item_search);
    final SearchView searchView = (SearchView) searchItem.getActionView();
    searchView.setQueryHint("Search Here");
}

现在奇怪的事情发生了,在我的第一个片段中我做了同样的事情并且搜索视图成功打开。

If

  • 我转到第一个片段,打开搜索视图,然后转到第二个片段
  • 搜索视图将被打开的片段。

第三个片段也发生同样的情况

  • 转到第三个片段,
  • 打开搜索视图,
  • 回到第二个片段,searchview 被打开。

但是,如果我直接转到第二个片段,则搜索视图不会打开。

希望我很清楚。

有什么线索吗? 任何建议/链接将不胜感激..

提前致谢...

EDIT ::

menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

   <item
        android:id="@+id/menu_item_search"
        android:icon="@drawable/abs__ic_search"
        android:showAsAction="ifRoom|collapseActionView"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView" 
        android:title="Search Products">
    </item> 
    <item
        android:id="@+id/root_menu"
        android:icon="@drawable/abs__ic_menu_moreoverflow_normal_holo_light"
        android:showAsAction="always"
        android:title="More">
        <menu>
            <item
                android:id="@+id/menu_Home"
                android:icon="@drawable/home"
                android:showAsAction="never"
                android:title="Home"/>
            <item
                android:id="@+id/menu_favourite"
                android:icon="@drawable/favourite"
                android:showAsAction="never"
                android:title="Favourite"/>
            <item
                android:id="@+id/menu_Balance"
                android:icon="@drawable/balance"
                android:showAsAction="never"
                android:title="Balance"/>
            <item
                android:id="@+id/menu_logout"
                android:icon="@drawable/btn_logout"
                android:showAsAction="never"
                android:title="Logout"/>
        </menu>
    </item>

</menu>

日志猫::

    12-06 16:45:26.401: E/AndroidRuntime(1581): FATAL EXCEPTION: main
12-06 16:45:26.401: E/AndroidRuntime(1581): java.lang.ClassCastException: com.mobifin.subscriber.ButtonPayActivity
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.mobifin.subscriber.home.BillPayFragment.onCreateOptionsMenu(BillPayFragment.java:101)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.support.v4.app.Watson.onCreatePanelMenu(Watson.java:55)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:560)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:466)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:265)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:149)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:155)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.support.v4.app.Fragment.setMenuVisibility(Fragment.java:726)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:127)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.support.v4.view.ViewPager.populate(ViewPager.java:802)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1280)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1176)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.drawChild(ViewGroup.java:1562)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.View.draw(View.java:6883)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.View.draw(View.java:6883)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewRoot.draw(ViewRoot.java:1522)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.os.Looper.loop(Looper.java:130)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at android.app.ActivityThread.main(ActivityThread.java:3683)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at java.lang.reflect.Method.invokeNative(Native Method)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at java.lang.reflect.Method.invoke(Method.java:507)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-06 16:45:26.401: E/AndroidRuntime(1581):     at dalvik.system.NativeStart.main(Native Method)

我们一般使用onCreateOptionsMenu()用于为片段和活动创建选项菜单。 如果您浏览文档,还有另一个名为的帮助器方法onPrepareOptionsMenu()根据文档所述:

准备要显示的屏幕标准选项菜单。这是 每次显示菜单之前都会调用。你可以 使用此方法可以有效地启用/禁用项目或以其他方式 动态修改内容。

SearchView当我们不在内部实例化片段时,扩展/折叠效果很好ViewPager或任何类似的选项卡,例如切换场景。我曾经遇到过同样的问题。 我想出了使用onPrepareOptionsMenu()解决我的问题。

只需实施onPrepareOptionsMenu()在每个片段及其内部,调用onQueryTextChange("")通过""作为查询字符串。它将起到建议该片段想要关注其自己的搜索业务的片段容器活动的作用。

或者,不确定,但请致电invalidateOptionsMenu()关于容器活动也可以派上用场。

让我知道这是否有帮助。

EDIT:

我的实施:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);

        SearchView searchView = new SearchView(getActivity());
        searchView.setQueryHint("Search for Events");
        searchView.setOnQueryTextListener(this);

        menu.add(0, ACTION_SEARCH, 0, "Search")
                .setIcon(R.drawable.ic_mailbox_search)
                .setActionView(searchView)
                .setOnActionExpandListener(menuExpandListener)
                .setShowAsAction(
                        MenuItem.SHOW_AS_ACTION_IF_ROOM
                    | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
    }

@Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        onQueryTextChange("");
    }

@Override
    public boolean onQueryTextSubmit(String query) {
        return true;
    }

    @Override
    public boolean onQueryTextChange(String newText) {

        if (mAdapter != null)
            mAdapter.getFilter().filter(newText);
        return false;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作栏 Sherlock SearchView 单击时不会展开 的相关文章

随机推荐

  • Joi 验证正则表达式或模式

    我想加入使用在变量中定义的正则表达式模式 我有一个变量pattern其中包含正则表达式 IE pattern 0 9 7 0 9 1 这个模式发送到 Joi 模块并想要确认 module exports save body match Jo
  • 无 RDP 时自动发送密钥失败

    我有一个虚拟机 我希望在其上运行自动化任务 即自动化任务在实际虚拟机上运行 VM 是 Windows 2008 服务器 我已将该任务添加到任务计划程序中 当我通过 RDP 登录到计算机时 我可以通过右键单击 运行 来运行该任务 但是 当我的
  • switch语句:default必须是最后一种情况吗?

    考虑以下switch陈述 switch value case 1 return 1 default value fall through case 2 return value 2 该代码可以编译 但它对于 C90 C99 有效 定义的行为
  • 将大图像加载到位图中?

    我正在尝试制作一个显示来自相机的图像的基本应用程序 但是当我尝试使用 sdcard 加载 jpg 时BitmapFactory decodeFile 它返回 null 它不会给出我觉得奇怪的内存不足错误 但完全相同的代码在较小的图像上运行良
  • 文件名包含空格的 Shell 脚本问题

    我知道处理文件名中空格的一种技术是用单引号将文件名引起来 为什么下面的代码 echo sh 可以在包含带空格的文件名的目录上工作 但是程序 ls sh 却不起作用 唯一的区别是 echo 被 ls 替换了 echo sh bin sh fo
  • Mongoose 模型枚举的自定义错误消息

    我想自定义我的 Mongoose 模型生成的验证消息 我倾向于不直接将我的验证 例如必需的 放在模式对象上 因为没有自定义错误消息的自由 例如 sourceAccountId type Schema ObjectId require tru
  • 禁用“单页”网络应用程序的惯性滚动

    我正在尝试创建一个 单页 网络应用程序 其风格与 Gmail Google Docs Evernote 等相同 在这些应用程序中 允许惯性滚动拉动页面是没有意义的 这是我尝试禁用的效果的视频 http tinypic com r 2eb6f
  • AWS ec2 根卷增加:在 aws ubuntu 实例上扩展弹性根卷不起作用

    我已经关注了用于扩展弹性根卷的 aws 文档我的根卷大小从 8 GB 增加到 20 GB 我确认使用lsblk NAME MAJ MIN RM SIZE RO TYPE MOUNTPOINT xvda 202 0 0 20G 0 disk
  • 将 xtable 输出拆分为子表

    有一个关于在有多列时将 xtable 与 Sweave 一起使用的问题 我正在处理的表格大约有 25 列和 5 行 确切的列数未知 因为它是动态的 当我跑步时说 表 1 我得到的表格基本上超过了页面长度 ColA ColB ColC Row
  • XCHG 在 Intel 汇编语言中如何工作?

    如何xchg以下代码中的指令工作 已知arrayD是一个 DWORD 数组 1 2 3 mov eax arrayD eax 1 xchg eax arrayD 4 eax 2 arrayD 2 1 3 为什么后面不是数组 1 1 3xch
  • 正则表达式匹配单个点而不是两个点?

    尝试创建用于电子邮件地址检查的正则表达式模式 这将允许使用点 但如果有多个点相邻 则不允许使用点 应匹配 电子邮件受保护 不应该匹配 电子邮件受保护 现在我知道互联网上有数千个用于电子邮件匹配的示例 因此请不要向我发布包含完整解决方案的链接
  • Matlab - save(int2str(i), x) 不起作用 - 参数必须包含字符串

    我有一个循环正在生成一些数据 在某些情况下我想保存数据 因此我有 save int2str i x 这不起作用并显示以下消息 Error using gt save Argument must contain a string 我究竟做错了
  • 无法 Dockerize Vite React-Typescript 项目

    我正在尝试对 Vite React Typescript 样板设置进行 dockerize 但无法连接到容器 安装了 vite react typescript 样板 npm init vite latest vite docker dem
  • 返回 http 200 OK,响应正文中有错误

    我想知道返回是否正确HTTP 200 OK当服务器端发生错误时 错误详细信息将包含在响应正文中 Example 我们正在发送HTTP GET 服务器端发生了一些意想不到的事情 服务器返回HTTP 200 OK响应中存在错误的状态代码 例如
  • 如何通过给出私钥获得RSA公钥?

    我正在寻找一个 Java 函数 它将获取 RSA 私钥并返回正确的 RSA 公钥 或者 是否有一个函数可以告诉我们 RSA 私钥 公钥是否有效 如果您有私钥作为RSA私钥对象 您可以获得公共指数以及模数 然后你可以像这样创建公钥 RSAPu
  • 如何在 django 的 ModelForm 中使用 DatePicker?

    我正在使用 django 3 0 我试图在我的 ModelForm 中显示一个日期选择器小部件 但我不知道如何 我能得到的只是文本字段 我尝试寻找一些解决方案 但找不到任何解决方案 这就是我的模型和 ModelForm 的样子 class
  • 在 AngularJS 自定义验证指令中调用异步服务

    我有一个自定义验证指令 验证用户名尚不存在 验证使用 http服务询问服务器用户名是否存在 因此返回的是一个promise对象 这对于验证来说非常有效 当用户名已被使用时 表单无效并包含 myform error usernameVerif
  • 如何将 Angular Promise 转换为 jquery 延迟对象

    我想将承诺从我的模块 sdk 返回到非角度 javascript 例如 如果我将 Promise 返回给 jquery 我可能应该发送 jquery 延迟对象 如何将 Angular Promise 转换为 jquery Promise D
  • Xcode 6 iPhone 模拟器应用程序支持位置

    在 Xcode 6 中 我有一个正在使用 Core Data 的应用程序 但 iOS 8 iPhone 模拟器的应用程序支持中没有文件夹 我的文件和 Core Data sqlite 数据库存储在哪里 模拟器目录已随 Xcode 6 bet
  • 操作栏 Sherlock SearchView 单击时不会展开

    我有一个 Sherlock 片段活动 我使用片段寻呼机适配器从中设置不同的 Sherlock 片段 现在 为了在每个片段中显示搜索视图 我已将此方法放置在片段的 onCreate 中 此方法将在片段的 ActionBar 中显示菜单项 Ov