首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SearchView + Filterable RecyclerView让SearchView失去焦点

SearchView + Filterable RecyclerView让SearchView失去焦点
EN

Stack Overflow用户
提问于 2019-07-24 14:55:04
回答 2查看 286关注 0票数 0

我有相同布局的searchViewrecyclerViewrecyclerView正在使用过滤器,它工作正常。

searchView上输入查询时出现问题。在我输入查询的第一个字符后,searchView将失去焦点,而不是让我完成键入。假设我想要显示其名称中包含"1234“的所有项,searchView将在我输入"1”后失去焦点,然后显示所有包含"1“的项。如果要继续,我必须再次单击该searchView

这是我的布局(片段):

代码语言:javascript
复制
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.SearchView
            android:id="@+id/sv_test"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@android:color/transparent"
            android:inputType="number"
            app:iconifiedByDefault="false"
            app:queryBackground="@android:color/transparent"
            app:queryHint="Hint"
            app:theme="@style/AppSearchView">

        </android.support.v7.widget.SearchView>

        <View
            android:id="@+id/divider50"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/light_grey"
            android:visibility="visible" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_test"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

下面是我的filter命令:

代码语言:javascript
复制
private void setSearchview() {
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                adapter.getFilter().filter(query);

                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                adapter.getFilter().filter(query);

                return false;
            }
        });
    }

我在自定义警报对话框中有类似的布局,它工作得很好,没有任何问题。很奇怪,对吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-24 15:42:20

如果您的RecyclerView中有一个可聚焦的项(如EditText),那么它可能会在第一次更新时抢占焦点。要禁止RecyclerView获得任何焦点,可以将descendantFocusability参数添加到XML中,如下所示:

代码语言:javascript
复制
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_test"
        android:layout_width="match_parent"
        android:descendantFocusability="blocksDescendants"
        android:layout_height="wrap_content" />

如果您需要在RecyclerView中进行聚焦,您可能会找到一个动态设置此参数的解决方案(因此它会在更新之前关闭焦点,并在更新之后重新打开)。

票数 3
EN

Stack Overflow用户

发布于 2019-07-24 15:01:34

代码语言:javascript
复制
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
     @Override
     public boolean onQueryTextSubmit(String query) {
       adapter.getFilter().filter(query);
       return true;
     }

     @Override
     public boolean onQueryTextChange(String query) {
       adapter.getFilter().filter(query);
       return true;
     }
});

将false更改为true。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57176919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档