片段中的 SearchView(activity 中的膨胀菜单)
SearchView in fragment (inflated menu in activity)
我在 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
中扩充菜单(我需要隐藏复选标记并稍后在用户进行一些输入后启用它,所有逻辑都在 activity 中),在 Fragment 中,我有 RecyclerView
,我需要执行搜索(在工具栏中)。所以基本上,我只需要访问 SearchView
INSIDE FRAGMENT。
我一直在努力寻找任何东西,但没有任何帮助,如果我在 fragment
中膨胀 menu
然后我在 toolbar
.
中得到双倍的图标
setHasOptionsMenu(true);
已添加到 onCreate
我也试过这个:
1. 在 fragment 中扩充菜单(在 activity 中删除了 onCreateOptionsMenu)
2. 通过界面将 menuItem(复选标记)传回 activity,这样我就可以访问复选标记
3. 如果我在 searchview
上设置侦听器,仍然会出现 NPE
我在片段中制作了选项菜单。像这样,
@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"。
已解决:
mMenuSearch = (SearchView) menu.findItem(R.id.order_menu_search).getActionView();
mMenuSearch.setOnQueryTextListener(this);
在 Fragment 上添加了 implements SearchView.OnQueryTextListener
和 2 个新的覆盖方法 onQueryTextSubmit
和 onQueryTextChanged
我在 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
中扩充菜单(我需要隐藏复选标记并稍后在用户进行一些输入后启用它,所有逻辑都在 activity 中),在 Fragment 中,我有 RecyclerView
,我需要执行搜索(在工具栏中)。所以基本上,我只需要访问 SearchView
INSIDE FRAGMENT。
我一直在努力寻找任何东西,但没有任何帮助,如果我在 fragment
中膨胀 menu
然后我在 toolbar
.
setHasOptionsMenu(true);
已添加到 onCreate
我也试过这个: 1. 在 fragment 中扩充菜单(在 activity 中删除了 onCreateOptionsMenu) 2. 通过界面将 menuItem(复选标记)传回 activity,这样我就可以访问复选标记 3. 如果我在 searchview
上设置侦听器,仍然会出现 NPE我在片段中制作了选项菜单。像这样,
@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"。
已解决:
mMenuSearch = (SearchView) menu.findItem(R.id.order_menu_search).getActionView();
mMenuSearch.setOnQueryTextListener(this);
在 Fragment 上添加了 implements SearchView.OnQueryTextListener
和 2 个新的覆盖方法 onQueryTextSubmit
和 onQueryTextChanged