tbo*_*rja 25 android searchview
我使用的是Android 4.1.2.我有一个SearchView小部件ActionBar.SearchView.OnQueryTextListener来自android开发者网站的文档指出,onQueryTextSubmit当"用户提交查询时调用.这可能是由于键盘上的按键或按下提交按钮所致."
如果搜索查询为空,则不会发生这种情况.我需要这个来触发一个空查询来清除ListView的搜索过滤器.这是一个错误还是我做错了什么?
Sam*_*Sam 14
它不是一个bug,源代码故意检查null和empty值:
private void onSubmitQuery() {
CharSequence query = mQueryTextView.getText();
if (query != null && TextUtils.getTrimmedLength(query) > 0) {
Run Code Online (Sandbox Code Playgroud)
但是,当用户清除搜索EditText时,您应该能够使用OnQueryTextChange回调来清除ListView的过滤器.
Jam*_*Tan 12
我有一个更容易的解决方法:使用onQueryTextChange,但只有渲染,如果它是空的.
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
renderList(true);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (searchView.getQuery().length() == 0) {
renderList(true);
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
Pio*_*zan 10
我有同样的问题,最终得到以下解决方案:自定义SearchView+OnQueryTextListener.onQueryTextChange
自定义SearchView:
public class MySearchView extends SearchView {
private boolean expanded;
public MySearchView(Context context) {
super(context);
}
@Override
public void onActionViewExpanded() {
super.onActionViewExpanded();
expanded = true;
}
@Override
public void onActionViewCollapsed() {
super.onActionViewCollapsed();
expanded = false;
}
public boolean isExpanded() {
return expanded;
}
}
Run Code Online (Sandbox Code Playgroud)
创建操作并设置回调:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
searchAction = menu.add(0, SEARCH_ACTION_ID, 0 , getString(R.string.action_search));
searchAction.setShowAsAction(SHOW_AS_ACTION_ALWAYS | SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
searchView = new MySearchView(getSherlockActivity());
searchView.setOnQueryTextListener(searchQueryListener);
searchView.setIconifiedByDefault(true);
searchAction.setActionView(searchView);
}
Run Code Online (Sandbox Code Playgroud)
最后听众:
private OnQueryTextListener searchQueryListener = new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
search(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (searchView.isExpanded() && TextUtils.isEmpty(newText)) {
search("");
}
return true;
}
public void search(String query) {
// reset loader, swap cursor, etc.
}
};
Run Code Online (Sandbox Code Playgroud)
测试ABS 4.3.
小智 9
我在SearchView上遇到了同样的问题.我的解决方案包括样式SearchView,如http://novoda.com/blog/styling-the-actionbar-searchview/指南所示,并为EditText设置OnEditorActionListener(当用户点击输入时如何触发操作?)是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;
}});
Run Code Online (Sandbox Code Playgroud)
这是一个旧线程,但我找到了另一个解决方案(Kotlin 代码,但也适用于 Java):
override fun onQueryTextChange(newText: String?): Boolean {
if(newText == null || newText.isEmpty())
searchView.setQuery("\u00A0", false)
return true
}
Run Code Online (Sandbox Code Playgroud)
\u00A0是一个看起来像空格的字符,但在代码方面它不是。换句话说 SearchView 不是空的。空字符串或" "不起作用,因为基本 SearchView 使用修剪,加上用户可能想要搜索以空格结尾或开头的文本。但据我所知用户不能输入\u00A0字符。
然后你需要做的就是return super.getQuery.replace("\u00A0", "")在你的自定义 SearchView 中覆盖 getQuery
| 归档时间: |
|
| 查看次数: |
44530 次 |
| 最近记录: |