我的searchView
和recyclerView
的布局相同。
recyclerView
正在使用过滤器,并且工作正常。
我在searchView
上输入查询时发生了问题。输入我的查询的第一个字符后,searchView
会失去焦点,而不是让我完成输入。假设我要显示名称中包含“ 1234”的所有项目,在我输入“ 1”之后searchView
将失去焦点,然后显示包含“ 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;
}
});
}
我在自定义警报对话框中有类似的布局,并且工作正常,没有任何问题。对吗?
答案 0 :(得分: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内,则可以找到一种解决方案,该解决方案可以动态设置此参数(因此在更新之前将其关闭,然后在更新之后将其重新打开)。
答案 1 :(得分:0)
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。