使用搜索视图时,我要求客户在重新打开搜索视图后保留搜索内容。 “我的搜索”视图位于列表视图中,并根据用户在搜索框中输入的内容进行实时定时过滤。通过单击手机上的后退按钮关闭搜索框或单击操作栏左上角的软后退按钮,搜索框关闭,搜索视图图标。但是下次重新打开时,上次使用的搜索查询也被清除了,这是我不想要的。
我的问题是,我可以通过哪种方式保留搜索视图内容。只是隐藏搜索框,但不清楚内容?
我的相关代码如下:
MenuItem search;
SearchView searchView;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_locationlist_fragment, menu);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
search = menu.findItem(R.id.action_search_location_list);
searchView = (SearchView) MenuItemCompat.getActionView(search);
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(this);
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
//This will make sure, when user closed search view, the list will be restored.
if(!hasFocus) {
Log.i(Tags.LOCATIONLIST,"Search Close");
search.collapseActionView();
} else {
}
}
}
});
ImageView closeButton = (ImageView)searchView.findViewById(R.id.search_close_btn);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText searchEditText = (EditText)searchView.findViewById(R.id.search_src_text);
searchEditText.setText("");
if (((LocationListAdapter)locationListView.getAdapter())!=null) {
((LocationListAdapter) locationListView.getAdapter()).getFilter().filter("");
}
}
});
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search_location_list:
((BaseActivity) getActivity()).onSearchRequested();
return true;
case R.id.action_refresh_location_list:
refreshLocationList();
return true;
default:
return false;
}
}
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
if (((LocationListAdapter)locationListView.getAdapter())!=null) {
if (TextUtils.isEmpty(s)) {
locationListView.clearTextFilter();
} else {
((LocationListAdapter) locationListView.getAdapter()).getFilter().filter(s);
//locationListView.setFilterText(s.toString());
}
}
return true;
}
答案 0 :(得分:2)
使用
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setIconified(false);
图标化时会清除任何查询文本。所以setIconified为false。我使用了android.widget.SearchView
答案 1 :(得分:1)
将您的字符串保存在变量中(例如myWantedString)
和
每次打开SearchView时都会覆盖setOnClickListener,并使用setQuery。你的代码应该是:
searchView.setOnSearchClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
searchView.setQuery(myWantedString, false);
}
});
每次SearchView关闭工具setOnCloseListener并覆盖onClose()
时保存字符串:
searchView.setOnCloseListener(new SearchView.OnCloseListener()
{
@Override
public boolean onClose()
{
myWantedString = searchView.getQuery();
return false;
}
});
答案 2 :(得分:1)
searchView.setQuery()在菜单项扩展后延迟调用时有效。
MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
// set query text with a delay
searchView.post(new Runnable() {
@Override
public void run() {
searchView.setQuery(query, false);
}
});
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return true;
}
});
答案 3 :(得分:0)
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setIconified(false);
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setQuery("SEARCH_WORD", false);
}
});
https://developer.android.com/reference/android/widget/SearchView 设置一个侦听器,以通知何时按下搜索按钮。这仅在默认情况下不显示文本字段时才有意义。调用setIconified(false)也会导致此侦听器被通知。