Android SearchView空字符串

我正在尝试使用SearchView,除非我想搜索空字符串,否则我可以使用一切。
当我删除最后一个字符时,onQueryTextChange会做出反应,但我希望用户能够在搜索字段为空时按下搜索按钮。

final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { // Do something return true; } @Override public boolean onQueryTextSubmit(String query) { // Do something return true; } }; searchView.setOnQueryTextListener(queryTextListener); 

我也尝试过使用OnKeyListner。 但它似乎也没有用。

  searchView.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View arg0, int arg1, KeyEvent arg2) { //Do something return true; } }); 

这似乎是一件很简单的事情,但我无法让它发挥作用。 有什么建议么?

编辑

我已经找了一段时间的解决方案,在发布这个问题后几分钟,我找到了一个解决方案。
在这个post中,我发现这不是一个错误,但它实际上是故意的。

Android SearchView.OnQueryTextListener OnQueryTextSubmit未在空查询字符串上触发

所以我刚刚下载了ActionBarSherlock并对onSubmitQuery()方法进行了一些修改

 private void onSubmitQuery() { CharSequence query = mQueryTextView.getText(); if (query != null && TextUtils.getTrimmedLength(query) > 0) { if (mOnQueryChangeListener == null || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) { if (mSearchable != null) { launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString()); setImeVisibility(false); } dismissSuggestions(); } } } 

和修改版

 private void onSubmitQuery() { CharSequence query = mQueryTextView.getText(); if(query == null) {query = "";} if (mOnQueryChangeListener == null || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) { if (mSearchable != null) { launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString()); setImeVisibility(false); } dismissSuggestions(); } } 

希望如果其他人遇到这个问题,这会有所帮助。

也许它不适合您的应用,但您也可以选择使用简单的EditText ,然后添加TextWatcher监听器。 这样,即使用户输入空字符串,您也会捕获每个输入。

我在SearchView上遇到了同样的问题,但我不想使用ActionBarSherlock,所以我想出了一个解决方案,其中包括样式化你自己的SearchView,如http://novoda.com/blog/styling-the-actionbar-searchview/指南中所示。为EditText设置OnEditorActionListener( 当用户点击enter时如何触发操作? ),这是SearchView的一部分。

 final SearchView searchView = (SearchView)findViewById(R.id.search); int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); EditText searchPlate = (EditText) searchView.findViewById(searchPlateId); searchPlate.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { //Do something } return false; });