gpt4 book ai didi

Android SearchView 需要点击两次才能展开 View

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:23 25 4
gpt4 key购买 nike

简而言之:当我点击我的 SearchViewIcon 时,SearchView 不会折叠/展开。

长:

我正在使用 SearchView 在我的 MainActivity 中的 Fragment 中过滤 RecyclerView。

当我点击 SearchViewIcon 时(SearchView 默认图标化)。我使用以下代码打开包含正确 fragment 的选项卡:

searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(2, false);
}
});

具有正确 fragment 的选项卡按预期打开。还显示了文本输入,但 SearchView 保持图标化。 (见下图。)

Application

我的 XML 搜索 View :

<item
android:id="@+id/action_search"
android:orderInCategory="1"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/menu_item_search_title"
app:showAsAction="ifRoom"
app:queryHint="Search name or function"
app:actionViewClass="android.support.v7.widget.SearchView" />

我已经尝试过的事情:

将我的 showAsAction 设置为 always 或 ifRoom|collapseActionView

app:showAsAction="always"
app:showAsAction="ifRoom|collapseActionView"

请求关注我的 SearchView:

searchView.requestFocus();

展开我的 SearchViewItem:

MenuItem searchViewItem = menu.findItem(R.id.action_search);
searchViewItem.expandActionView();

但是这些都没有用...

编辑正如标题所说,如果我再次单击 SearchViewIcon,SearchView 会展开。

最佳答案

我也遇到过类似的问题,并且能够解决。我需要解决的主要问题是:

  1. searchView 默认不展开
  2. 搜索 EditText 直到第二次点击才获得焦点
  3. 即使在解决了 (2) 之后,键盘直到第二次点击才出现

解决方案:

  1. 在 menu.xml 中需要将 app:showAsAction 定义为 "collapseActionView" + 在 java 代码中还需要调用 searchView.setIconifiedByDefault(false) 用于扩展优先于图标化(即 - 当按下图标时,展开并且不要停留在图标模式)
  2. 为您的 search menu-item object 添加一个 MenuItem.OnActionExpandListener 并使用处理程序发布一个 runnable 请求焦点到您的 search-view 对象。(为什么是可运行的?因为当菜单仍未完全膨胀时请求焦点不能保证工作。在处理程序可运行中请求焦点时,我确保焦点请求发生在 onCreateOptionsMenu( ) 准备就绪并完成。
  3. 在与 (2) 相同定义的 runnable 中,也要求 android OS 显示键盘。

解决所有这些问题的完整代码:

menu.xml:

    <item
android:id="@+id/searchContacts"
android:icon="@drawable/ic_search_white_24dp"
android:title="search"
app:showAsAction="collapseActionView|always"
app:actionViewClass="android.widget.SearchView"
/>
<!-- and of course your other menu items -->

searchable configuration:

需要创建这样的xml文件。右键单击您的 res 文件夹并选择 new --> android resource file。把你想要的任何东西作为文件名(例如,“可搜索的”就可以了),然后选择 XML 作为资源类型。然后将此代码复制并粘贴到创建的文件中(用您自己的提示字符串替换提示字符串):

<?xml version="1.0" encoding="utf-8"?>

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="put here your hint string to be shown"
/>

MainActivity:

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu, menu);
implementSearch(menu);
return true;
}

private void implementSearch(final Menu menu) {
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final MenuItem searchMenuItem = menu.findItem(R.id.searchContacts);
final SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);

searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener(){
@Override
public boolean onMenuItemActionExpand(MenuItem item){
// the search view is now open. add your logic if you want
new Handler().post(new Runnable() {
@Override
public void run() {
searchView.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) { // it's never null. I've added this line just to make the compiler happy
imm.showSoftInput(searchView.findFocus(), 0);
}


}
});
return true;
}


@Override
public boolean onMenuItemActionCollapse(MenuItem item){
// the search view is closing. add your logic if you want
return true;
}

});

}

此外,如果您想使用自己的回调来进行搜索的文本更改和提交(而不是 Android Intent ),请在 implementSearch() 方法中添加对 searchMenuItem.setOnActionExpandListener 的调用(新的 SearchView.OnQueryTextListener({...}))

查看this SO question了解更多详情

关于Android SearchView 需要点击两次才能展开 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35505300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com