AsyncTask в TabLayout - PullRequest
       18

AsyncTask в TabLayout

0 голосов
/ 29 апреля 2019

У меня есть приложение с 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...