我有一个Web服务,可以根据给定的字符串过滤相似的用户。
我使用editText AfterTextChanged
侦听器在每次字符更改时发出请求。通常,我可以很好地过滤获取的列表。但是我在使用此实时过滤器时遇到了麻烦。
例如;当我设置"k"
时,服务器找到"Kevin"
并给出json。我将获取的列表设置为适配器,但是就像闪烁一样,并立即将其自身删除。即使我没有在editText
中键入任何其他字符。有时我需要提交2-3个字符才能获得结果,但是即使我只输入“ k”,服务器也会给我json。我进行了调试,服务器端运行良好,问题出在我想的onTextChanged
上。
我的片段类
editText_search_people.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
fetchSearchPeople(s.toString());
}
});
return view;
}
private void fetchSearchPeople(String userNick){
API_Service api_service = Client.getRetrofitInstance().create(API_Service.class);
Call<List<Model_SearchPeople>> call = api_service.fetchSearchPeople(userNick);
call.enqueue(new Callback<List<Model_SearchPeople>>() {
@Override
public void onResponse(Call<List<Model_SearchPeople>> call, Response<List<Model_SearchPeople>> response) {
if(response.code() == 200){
searchList = new ArrayList<>();
searchList = response.body();
adapter_searchPeople = new Adapter_SearchPeople(getContext(), searchList);
recyclerView_search_people.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recyclerView_search_people.setLayoutManager(linearLayoutManager);
recyclerView_search_people.setAdapter(adapter_searchPeople);
}
}
@Override
public void onFailure(Call<List<Model_SearchPeople>> call, Throwable t) {
}
});
}