【发布时间】:2017-09-29 08:34:54
【问题描述】:
我在SearchView.OnQueryTextListener 上获得了 NPE。
/res/menu/order_toolbar.xml
<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" />
ActivityOrder.java
@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);
}
FragmentOrder.java
@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;
}
});
}
我在Activity 中膨胀菜单(我需要隐藏复选标记并在用户进行一些输入后启用它,所有逻辑都在活动中),在片段中,我有RecyclerView,我需要实现搜索(在工具栏中)。所以基本上,我只需要访问SearchView INSIDE FRAGMENT。
我一直在尝试寻找任何东西,但没有任何帮助,如果我在fragment 中膨胀menu,那么我会在toolbar 中得到双倍的图标。
setHasOptionsMenu(true);
已经添加到onCreate
我也试过这个: 1.在fragment中充气菜单(移除了activity中的onCreateOptionsMenu) 2.将menuItem(复选标记)传回活动槽界面,以便我可以访问复选标记 3. 如果我在 searchview 上设置监听器,仍然会得到 NPE
【问题讨论】:
-
如果可以,您可以在 onCreateOptionsMenu 中编写代码。不在 onPrepareOptionsMenu 中
-
正如我已经说过的,如果我在 Fragment 中膨胀,我会得到双倍的图标。 Fragment 的目的是从活动中获取可序列化列表并将其传递给 RecyclerView 的适配器,因为我需要显示不同类型的排序(基于 Firebase 的值)
-
您可以在片段中制作选项菜单。您在 Fragment 中使用 'setHasOptionsMenu(true)'。
标签: java android android-fragments searchview