我有相同布局的searchView和recyclerView。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>下面是我的filter命令:
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;
}
});
}我在自定义警报对话框中有类似的布局,它工作得很好,没有任何问题。很奇怪,对吧?
发布于 2019-07-24 15:42:20
如果您的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中进行聚焦,您可能会找到一个动态设置此参数的解决方案(因此它会在更新之前关闭焦点,并在更新之后重新打开)。
发布于 2019-07-24 15:01:34
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。
https://stackoverflow.com/questions/57176919
复制相似问题