2013-11-12 5 views
1

Когда мне нужен контекст внутри моего фрагмента, я использую getActivity(), но иногда этот сбой кода дает мне NullPointer, я верю, потому что андроид продолжает выполнять код в фрагменте, но активность уже умерла.getActivity() внутри Fragment иногда сбой

Таким образом, чтобы исправить это, мне нужно всегда использовать:

final Activity activity = getActivity(); 
if(activity != null) { 
    //TODO: Use activity here 
} 

Но это SUX всегда verifiy, если активность не является нулевым, Есть другой способ сделать это без аварии?

+0

Операция, в которой размещается фрагмент, никогда не умирает, фрагмент не может отображаться без активности хозяина. Вы пытаетесь что-то сделать в Фрагменте, прежде чем добавлять его в действие или после его удаления из Activity? –

+0

Нет, но я использую AsyncTasks в Fragment (выполняется в onCreateView), в OnPostExecute моей AsyncTask я использую getActivity, в этой ситуации дайте мне NullPointer, я считаю, что, поскольку новый вид действия выполняется на переднем плане, а Android выполняет onPostExecute из AsyncTask из моего первой активности, но уже потерял ссылку. – fsilvestre

+0

О, так что у вас есть обезглавленный фрагмент, который не является частью пользовательского интерфейса? –

ответ

2

Возможно, вы правы. Когда ваш AsyncTask достигнет onPostExecute, активность может закончиться.

Необходимо, чтобы AsyncTask, когда фрагмент отделяется от Activity, должен cancel(). Это гарантирует, что onPostExecute не будет вызываться.

+0

Спасибо! Я не думал об этом. – fsilvestre

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