У меня есть приложение с TabLayout.Каждая вкладка является фрагментом, и три из них содержат AsyncTask для выполнения тяжелых фоновых операций.Смотрите ниже пример кода. backgroundLoadList AsyncTask вызывает getTabNetworkList , чтобы собрать данные в списке Array.
Теперь я запускаю приложение и, как одна из вкладок ранее, нижеНа вкладке система уже загружается в фоновом режиме под вкладкой ( setOffscreenPageLimit имеет значение 1).Если я затем поверну экран, getTabNetworkList отменяется в середине его операции, больше не присоединяется к контексту, не имеет доступа к строкам ресурсов в предложении catch и выдает исключение ниже.AsyncTask должным образом отменен в onDestroy .
java.lang.IllegalStateException: Fragment Tab_Network {80b32b2 # 2 id = 0x7f090030 android: switcher: 2131296304: 2} не присоединен к acontext.
Если я жестко закодирую строки ресурсов в предложении catch, это, конечно, работает, но исключение все еще есть.
У вас есть идея, как мне избавиться?этого исключения?Большое спасибо!
AsyncTask:
private class backgroundLoadList extends AsyncTask<Void, Integer, ArrayList<CustomDataStructure>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mSpinner.setVisibility(View.VISIBLE);
}
@Override
protected ArrayList<CustomDataStructure> doInBackground(Void... voids) {
ArrayList<CustomDataStructure> result = getTabNetworkList();
return result;
}
@Override
protected void onPostExecute(ArrayList<CustomDataStructure> customDataStructures) {
adapter.listItems.retainAll(customDataStructures);
adapter.listItems.addAll(customDataStructures);
adapter.notifyDataSetChanged();
mSpinner.setVisibility(View.GONE);
super.onPostExecute(customDataStructures);
}
}
Получение списка:
private ArrayList<CustomDataStructure> getTabNetworkList() {
CustomDataStructure item;
ArrayList<CustomDataStructure> items = new ArrayList<>();
try {
item = new CustomDataStructure(getResources().getString(R.string.itemDescType), networkRoaming);
items.add(item);
// long list with further items is coded here...
} catch (SecurityException e) {
// Exception occurs on the next line because the context is not available anymore for getting the resources...
item = new CustomDataStructure(getResources().getString(R.string.itemInfo), getResources().getString(R.string.textNotAvailable));
items.add(item);
}
return items;
}