正如问题标题所示,我正在尝试实现放置在SearchView
工具栏中的DialogFragment
窗口小部件。菜单使用工具栏的inflateMenu
方法进行充气。
注意:对话框片段本身在另一个片段内调用,而非活动
以下是我如何调用dialogFragment:
SearchFragment searchDialog = new SearchFragment();
searchDialog.setStyle(DialogFragment.STYLE_NORMAL, R.style.FullscreenDialogFragment);
searchDialog.show(getChildFragmentManager(), "search");
这是我的menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.hubsante.Fragment.SearchFragment">
<item
android:id="@+id/action_search"
android:title="Rechercher"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom" />
</menu>
并执行菜单
toolbar.inflateMenu(R.menu.menu_objective_details);
toolbar.setOnMenuItemClickListener(this);
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.action_search){
SearchManager manager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SearchView search = (SearchView) item.getActionView();
search.setSearchableInfo(manager.getSearchableInfo(getActivity().getComponentName()));
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(getContext(), query, Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onQueryTextChange(String query) {
return true;
}
});
}
return true;
}
提交查询时不显示toast!即使我尝试在对话框片段内更新TextView,也不会更新。
答案 0 :(得分:0)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.mymenu, menu);
final SearchView searchView= (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setQueryHint(getResources().getString(R.string.search_view_helper));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchView.clearFocus();
// Your toast message
return true;
}
@Override
public boolean onQueryTextChange(String input) {
return false;
}
});
return true;
}
您可以在onCreateOptionsMenu()中引入searchview,并在其中设置侦听器,而不是尝试在onMenuItemClick上使用方法。这是在主机活动类中完成的,但您可以在片段
中覆盖它