Как предотвратить повторное выполнение Asynctask после поворота экрана? - PullRequest
0 голосов
/ 07 марта 2020

Для проекта колледжа мне нужно разработать приложение Android, которое извлекает данные JSON из API и отображает их в RecyclerView. Одним из требований приложения является то, что Asynctask не должен быть повторно выполнен после изменения ориентации экрана. Другими словами, после выполнения Asynctask и отображения RecyclerView с полученными данными, ему не нужно будет снова извлекать данные после поворота экрана.

В демонстрационных целях я добавил тост в метод onPostExecute, который показывает количество отображаемых элементов:

enter image description here

enter image description here

Как вы можете видеть, тост снова появляется после поворота экрана, а это означает, что Asynctask был повторно выполнен. Я хочу предотвратить это, но не могу понять, как.

1 Ответ

0 голосов
/ 07 марта 2020

Попробуйте добавить эту строку в тег активности файла манифеста.

<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>

Когда вы пишете этот параметр, вы не хотите обрабатывать что-либо в действии, но Android позаботится об этом , Он останется в существующем состоянии действия.

Если вы используете разные файлы макетов для альбомной ориентации, этот метод нарушит ваши макеты, поэтому вы можете использовать некоторые альтернативные методы для сохранения состояния.

Переопределите onSaveInstanceState метод в своей деятельности и добавьте некоторый параметр в Bundle

protected void onSaveInstanceState(Bundle bundle) {
  super.onSaveInstanceState(bundle);
  bundle.putLong("param", value);
}

И восстановите значение в onCreate, чтобы убедиться, что состояние уже создано.

public void onCreate(Bundle bundle) {
  if (bundle != null){
    value = bundle.getLong("param");
  }
}
...