- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在用户未输入任何内容时在 SearchView 中显示一些默认建议。我正在使用矩阵光标手动设置我的自定义建议适配器。我尝试在 onFocusChange 和 onClickListner 中设置适配器,但建议隐藏在键盘后面,显然建议加载早于键盘。我没有找到任何监听器告诉我 searchview 在 View 中完全加载了键盘。帮助我找到正确的解决方案或任何解决方法。我已经尝试过 postDelayed 的解决方法,但体验并不顺畅。
我在 onCreateOptionsMenu 中有这段代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.clear();
final MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.searchview_in_menu, menu);
this.menu=menu;
basketProductCount = ShoppinglistDataSource.get(getContext()).getProductCountToOrder();
if(basketProductCount>0 && menu!=null){
this.activateBasket();
}
SearchManager manager = (SearchManager) getSystemService(SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) searchMenuItem.getActionView();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
int searchButtonId = mSearchView.getContext().getResources().getIdentifier("android:id/search_button", null, null);
ImageView searchButton = (ImageView) mSearchView.findViewById(searchButtonId);
if(searchButton!=null)
searchButton.setImageResource(R.drawable.search);
mSearchView.setSearchableInfo(manager.getSearchableInfo(new ComponentName(getApplicationContext(), SearchProductActivity.class)));
mSearchView.setIconifiedByDefault(true);
mSearchView.setIconified(true);
mSearchView.setQueryHint("Search from 4000+ products");
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Log.d("SEARCH_VIEW_DEBUG","Inside onQueryTextSubmit for query: "+s);
mSearchView.clearFocus();
mSearchView.setIconified(true);
//return false to let the SearchView perform the default action
return false;
}
@Override
public boolean onQueryTextChange(String query) {
query = query.toLowerCase().trim();
Log.d("Query changed to ",query);
if (query.length() > 1) {
Bundle b = new Bundle();
b.putString("query",query);
if(getLoaderManager().getLoader(1)!=null)
getLoaderManager().restartLoader(1, b, suggestionLoaderCallback);
else
getLoaderManager().initLoader(1, b, suggestionLoaderCallback);
}
return true;
}
});
mSearchView.setOnQueryTextFocusChangeListener(new SearchView.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean queryTextFocused) {
Log.d("DEBUGGIN", "onFocusChange");
if(!queryTextFocused) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
mSearchView.onActionViewCollapsed();
mSearchView.clearFocus();
}
} else {
/**This is doing the trick, but not smooth experience**/
/**also suggestions may get behind the keyboard if keyboard takes time to pop up**/
view.postDelayed(new Runnable() {
@Override
public void run() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
mSearchView.onActionViewExpanded();
Log.d("DEBUGGIN", "Inside expand");
if (mSearchView.getQuery().length() == 0) {
Log.d("DEBUGGIN", "getting default suggestions");
sug.clear();
sug.add("Personal Care");
sug.add("Oil");
sug.add("Spices");
sug.add("Breakfast");
sug.add("Snacks");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
String[] columns = new String[]{"_id", "text"};
Object[] temp = new Object[]{0, "default"};
final MatrixCursor cursor = new MatrixCursor(columns);
int i = 0;
for (i = 0; i < sug.size(); i++) {
if (!sug.get(i).equals("")) {
temp[0] = i;
temp[1] = sug.get(i);
cursor.addRow(temp);
}
}
Log.d("Initial categories", sug.toString());
mSearchView.setSuggestionsAdapter(new CustomSuggestionAdapter(ListAll.this, cursor, sug));
mSearchView.getSuggestionsAdapter().notifyDataSetChanged();
mSearchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionSelect(int i) {
Log.d("SEARCH_VIEW_DEBUG", "Inside onSuggestionSelect");
return false;
}
@Override
public boolean onSuggestionClick(int i) {
Log.d("SEARCH_VIEW_DEBUG", "Inside onSuggestionClick");
MatrixCursor cursor = (MatrixCursor) mSearchView.getSuggestionsAdapter().getItem(i);
String suggest1 = cursor.getString(cursor
.getColumnIndex("text"));
Log.d("Clicked Item", suggest1);
mSearchView.setQuery(suggest1, true);
return true;
}
});
}
}
}
}
}, 600);
}
}
});
}
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
/**This never gets called**/
Log.d("DEBUGGIN", "Inside onMenuItemActionExpand");
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
/**This never gets called**/
Log.d("DEBUGGIN", "Inside onMenuItemActionCollapse");
return true;
}
});
} else {
MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
/**This never gets called**/
Log.d("DEBUGGIN", "Inside MenuItemCompat onMenuItemActionExpand");
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
/**This never gets called**/
Log.d("DEBUGGIN", "Inside MenuItemCompat onMenuItemActionCollapse");
return true;
}
});
}
//return true onCreateOptionsMenu
return true;
}
最佳答案
您可以像这样在 MenuItem
上设置展开/折叠监听器:
menuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return true;
}
});
此监听器是在 API 级别 14 中引入的,因此为了向后兼容,您必须使用 v4 支持库。如果这样做,则必须像这样设置展开/折叠监听器:
MenuItemCompat.setOnActionExpandListener(this.searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return true;
}
});
关于android - Android SearchView 上是否有任何监听器通知 SearchView 是否已展开并准备好接受输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25158248/
我的 Activity 的主要内容区域中有一个 SearchView。 我需要覆盖我的 style.xml 文件中的 SearchView 样式(这样我就可以删除 SearchView 的下划线 -
我正在使用 Firebase-UI 的 FirebaseRecyclerAdapter。我无法在 SearchView 中实现过滤器。 我的数据库: 我的问题: 如何使用 FirebaseRecycl
我正在尝试以编程方式删除 SearchView 提示中的图标所占用的空间,但由于某种原因它不会消失。 此代码使图标不可见,但不会删除空格: try { Field mDrawa
我想在用户未输入任何内容时在 SearchView 中显示一些默认建议。我正在使用矩阵光标手动设置我的自定义建议适配器。我尝试在 onFocusChange 和 onClickListner 中设置适
如何删除或更改编辑文本中的搜索 View 图标?我正在使用 Appcompat 库。 我使用下面的代码修改和删除但它不起作用: SearchManager searchManager = (Searc
当我启动我的应用程序时,会引发以下错误: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.app, PID: 5513 jav
在我的应用程序中使用 SearchView。 无论如何我可以延迟对 onQueryTextChange() 方法的调用。例如,当用户键入一系列字符时,他必须等待此方法被调用。 此等待应该不取决于键入的
我正在尝试从 Fragment 中的工具栏获取我的 SearchView。 我在 onCreateOptionsMenu 中引入了一个菜单项。 问题:searchItem.getActionView(
我不确定为什么会收到此错误。这是有问题的菜单: 这是根据 developer guide 的可搜索配置. 添加到我的 list 文件中: 我在新的搜索 Activity 中也有一个
我是一名开发 Android 应用程序的新手,以下是该应用程序的第一个屏幕。我希望我的应用程序使用该搜索对话框执行搜索。 为此,我关注了http://developer.android.com/gui
我正在 CustomAdapter 上执行 SearchView,它将在其中搜索门名称。在我尝试运行该应用程序后,它突然崩溃并给我如上所述的错误。我不知道我什至做错了哪一部分导致我每次尝试运行我的应用
您好,我需要在 searchView 中放置一些文本并聚焦/展开 searchView 小部件。 这是我尝试过的,但它不起作用 @Override public boolean onCreateOpt
所以当我遇到错误“无法解析类 SearchView”时,我试图在我的应用程序中包含一个搜索栏。谷歌没有帮助,所以我来到这里。这是我的代码: 其余的 xml 已正确完成,我直接从 android 获取
我的搜索 View 有问题。 我有 2 个主题,当我第一次接触 searchview 时,我得到了丑陋的第一张图片。但是当我再次进入搜索 View 时,我从第二张图片中得到了很好的主题。 我总是想走第
我使用的不是 menuItem 而是布局中的搜索 View 。我支持的最低 API 级别是 9,搜索 View 是 11。 现在我这样创建了我的搜索 View : 在直线布局中。我注意到警告,所以
我在 here 中解决了我的问题之后当我在搜索框中输入文本时,搜索过滤器仍然不起作用。 这是我的代码: package intikom.streammobile.Customer; import an
我正在创建类似于屏幕上的 Activity 。我在工具栏中阅读了许多关于 SearchView 的教程,并在我的 Activity 中实现了它并且它有效(上面的代码)。但是如何制作这个下拉列表呢?感谢
我按照 Android 的官方说明在工具栏中实现了 SearchView。 SearchView 本身工作得很好,但是当我点击搜索图标时,它会向左移动,而不是显示搜索提示和关闭按钮,尽管如果我单击这个
Android Studio 3.2.1 在我的app / build.gradle中: android { compileSdkVersion 28 defaultConfig {
我有一个 RecylerView,它有 SearchView 小部件和包含复选框和玩家名称的项目列表。当我滚动项目并选择项目复选框时没有问题。但是,当我通过名称搜索项目然后选择它们时,就会出现问题,当
我是一名优秀的程序员,十分优秀!