2016-04-29 3 views
0

У меня есть AsyncTask, который извлекает некоторые вещи и основывается на полученных данных, созданных некоторыми фрагментами. В случае, если данные не возвращаются, я:Удаление всех фрагментов вызывает ошибку

if (data.size() == 0) { 
    List<Fragment> fragments = getChildFragmentManager().getFragments(); 
    if (fragments != null) { 
     FragmentTransaction txn = getChildFragmentManager().beginTransaction(); 
     for (Fragment fragment : fragments) txn.remove(fragment); 
     txn.commit(); 
    } 
} 

Этот кусок кода вызывает «Попытка записи в поле„INT android.support.v4.app.Fragment.mNextAnim“на нулевой ссылкой на объект». Любая идея почему?

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

getChildFragmentManager().executePendingTransactions() 

вызова перед созданием транзакции. Тем не менее, ошибка есть.

+0

Где вы находите метод ** getFragments() **? – Alexander

+0

извините, это означает, что менеджер фрагментов фрагментов, просто отредактировал вопрос – mpiekarz

+0

Какой метод является частью этого кода? –

ответ

1

Обычно эта ошибка возникает при попытке удалить ссылку на нуль-фрагмент из транзакций. Поэтому попробуйте это.

if (data.size() == 0) { 
      List<Fragment> fragments = getChildFragmentManager().getFragments(); 
      if (fragments != null) { 
       FragmentTransaction txn = getChildFragmentManager().beginTransaction(); 
       for (Fragment fragment : fragments) { 
        if (fragment != null){ 
         txn.remove(fragment); 
        } 
       } 
       txn.commit(); 
      } 
     } 
+0

работает. Просто любопытно - почему getFragments() возвращает список с нулями? – mpiekarz

+0

Я думаю, что для неактивного фрагмента они будут содержать нулевую ссылку. – Krish

Смежные вопросы