【问题标题】:SearchView + Filterable RecyclerView make SearchView losing focusSearchView + Filterable RecyclerView 使 SearchView 失去焦点
【发布时间】:2019-07-24 06:55:03
【问题描述】:

searchViewrecyclerView 的布局相同。 recyclerView 正在使用过滤器并且它工作正常。

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

这是我的布局(在片段中):

<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>

这是我的过滤命令:

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;
            }
        });
    }

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

【问题讨论】:

  • 返回真而不是假
  • @ChandraShekharKaushik 你好,我已经尝试过了,但看起来问题是我的 recyclerView 中的项目一直在窃取焦点。还是谢谢你。

标签: android android-recyclerview searchview


【解决方案1】:

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

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

如果您需要在 RecyclerView 内聚焦,您可以制定一个动态设置此参数的解决方案(因此它会在更新之前关闭焦点,然后在更新之后重新打开)。

【讨论】:

    【解决方案2】:
    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。

    【讨论】:

    • 您好,我已经尝试过了,但看起来问题是我的 recyclerView 中的项目一直在窃取焦点。还是谢谢你。
    猜你喜欢
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2015-04-26
    • 2016-10-29
    相关资源
    最近更新 更多