当前位置: 首页 > 知识库问答 >
问题:

片段中的SearchView(活动中的膨胀菜单)

乔宏峻
2023-03-14

我在SearchView.onQueryTextListener上获得NPE。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/order_menu_search"
    android:icon="@drawable/ic_search"
    android:title="@string/order_menu_search"
    app:actionViewClass="android.support.widget.v7.SearchView"
    app:showAsAction="ifRoom|withText" />

<item
    android:id="@+id/order_menu_checkmark"
    android:icon="@drawable/ic_checkmark"
    android:title="@string/order_toolbar"
    app:showAsAction="ifRoom|withText" />
    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.order_toolbar, menu);
    mMenuCheckmark = menu.findItem(R.id.order_menu_checkmark);
    mMenuCheckmark.setVisible(false);
    return super.onCreateOptionsMenu(menu);
}
    @Override
public void onPrepareOptionsMenu(Menu menu){
    MenuItem menuItem = menu.findItem(R.id.order_menu_search);
    SearchView searchView = (SearchView) menuItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
        Toast.makeText(getActivity(), "" +newText, Toast.LENGTH_SHORT).show();
            return false;
        }
    });
}
setHasOptionsMenu(true);

已添加到oncreate

我也尝试了这个:1。在fragment(活动中移除onCreateOptionsMenu)2中膨胀菜单。将menuItem(复选标记)传递回活动槽界面,这样我就可以访问复选标记3。如果在searchview上设置监听器,则仍然获得NPE

共有1个答案

广昊昊
2023-03-14

我在片段中制作选项菜单。像这样,

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
...
setHasOptionsMenu(true);
...
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.fragment_menu, menu);
    menu.findItem(R.id.menu_1).setIcon(ContextCompat.getDrawable(activity, R.drawable.ic_bar_search));
    searchView = (SearchView) menu.findItem(R.id.menu_1).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            return false;
        }
    });
    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            return false;
        }
    });
....
}  

不确定,您可以从OnCreateOptionsMenu调用“SearchView.SetOnQueryTextListener”。

 类似资料:
  • 主要活动: } 片段类 错误:java.lang.runtimeException:无法启动活动ComponentInfo{com.darkweb.android.chroma2018/com.darkweb.android.chroma2018.mainactivity}:Android.view.filflateException:二进制XML文件行#0:错误inflating类在Androi

  • 我制作了一个应用程序,在其中我显示了一个谷歌地图,在我的位置上有GPS定位标记。这张地图在第一个选项卡上,我还有两个其他选项卡,如下图所示 现在我面临一个问题,即当我从选项卡1移动到选项卡2,然后移动到选项卡1时,它工作得很好,但当我移动到选项卡3,然后再移回选项卡1或选项卡2时,应用程序崩溃,并在LogCat中出现以下异常: 它在以下点显示错误: 无论我选择任何选项卡,它都会在上面一行显示错误,

  • 我有一个没有动作栏主题的appcompat活动。我在活动中运行一个片段来显示项目列表。项目以两种模式显示:列表和删除。当屏幕打开时,它始终处于列表模式。两种显示模式下的动作条是不同的。在列表模式下,在操作栏的右侧有两个菜单项,当片段打开时会显示出来。当我从删除模式回到列表模式时,菜单项不会膨胀。如何使菜单项膨胀,同时从删除模式到列表模式。 进入屏幕后,用户进入列表模式。我有setHasOption

  • 有什么理由不不分青红皂白地这样做而不重新评估我使用片段的每个单独的情况吗?

  • ExpansionTile从ListTile继承,ListTile具有固定的高度。没有瓷砖高度的输入arg。 我尝试用一个硬编码高度将ExpansionTile包装在容器小部件中,但这导致子小部件只占用硬编码高度内的空间。目前,由于小部件中的内容很大,我有一条“Column Overflow by 23 pixels”消息。

  • 问题内容: 是否存在用于隐藏在Internet上的ByteBuffer的gzip压缩库?是什么让我们可以推送原始数据然后提取缩小的数据?我们已经搜索了它,但是仅找到处理InputStreams和OutputStreams的库。 我们的任务是创建gzip过滤器,以缩小管道体系结构中的ByteBuffers流。这是拉式体系结构,其中最后一个元素从较早的元素中提取数据。我们的gzip过滤器处理ByteB