Я создал EditText
, который используется для поиска.
Как только пользователь нажимает кнопку поиска, я показываю ProgressBar
до тех пор, пока RecyclerView
не будет загружен, делая это:
et_Search.setOnEditorActionListener( (v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
InputMethodManager imm =(InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE);
View view = this.getCurrentFocus();
imm.hideSoftInputFromWindow( view.getWindowToken(), 0);
pb_Search.setVisibility( View.VISIBLE );
query = et_Search.getText().toString();
fetchAddItems(query);
return true;
}
return false;
} );
Где:
private void fetchAddItems(String query) {
B_client = new ItemClient();
B_client.getItems( query, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
List<Item> Items;
try {
JSONArray items;
if (response != null) {
items = response.getJSONArray( "items" );
Items = Item.fromJson( items );
AddItemsAdapter = new AddItemAdapter(Items, listenerAdd);
rv_Items.setAdapter(AddItemsAdapter);
rv_Items.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
pb_Search.setVisibility( View.GONE );
}
});
}
} catch (JSONException ignored) {
}
}
} );
}
Все работает нормально.
Проблема в том случае, когда пользователь выполняет два поиска подряд.
В В этом случае RecyclerView
уже заполнен после первого поиска, и поэтому ProgressBar
не будет отображаться.
Есть ли способ сделать то, что я хочу в обоих случаях, когда RecyclerView заполнен / обновлено?
Спасибо
РЕШЕНИЕ:
Что решило мою проблему, так это удаление слушателя и использование этого:
rv_Items.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
rv_Items.setVisibility( View.VISIBLE );
pb_Search.setVisibility( View.GONE );
rv_Items.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});