2014-12-10 4 views
0

Я пытаюсь реализовать AsyncTaskLoader, работающий во фрагменте, и я точно не знаю, почему onLoadFinished никогда не вызывается. Я не уверен, что контекст, который я передаю, является правильным.AsyncTaskLoader не работает должным образом на фрагменте

Это основной и пользовательские AsyncTaskLoader:

public static class CustomAsyncLoader extends AsyncTaskLoader<String> 
{ 
     public CustomAsyncLoader(Context context) { 
      super(context); 
      // do some initializations here 
     } 

     @Override 
     protected void onForceLoad() { 
      // TODO Auto-generated method stub 
      super.onForceLoad(); 
     } 

     @Override 
     public void deliverResult(String apps) { 

     } 

     @Override 
     protected void onStopLoading() { 
      // Attempts to cancel the current load task if possible 
      cancelLoad(); 
     } 

     @Override 
     public void onCanceled(String apps) { 
      super.onCanceled(apps); 
     } 

     @Override 
     public String loadInBackground() { 
      String result = ""; 
       // ... 
       // do long running tasks here 
       // ... 
       return result;    
     } 
} 

Здесь я покажу вам 3 метода overwritted:

@Override 
public Loader<String> onCreateLoader(int arg0, Bundle arg1) { 
    // TODO Auto-generated method stub 
    return new CustomAsyncLoader(root.getContext()); 
} 

@Override 
public void onLoadFinished(Loader<String> arg0, String arg1) { 
    // TODO Auto-generated method stub 
    Toast.makeText(mContext, "onLoadFinish", Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onLoaderReset(Loader<String> arg0) { 
    // TODO Auto-generated method stub 

} 

В методе onResume моего фрагмента я звоню инициализировать загрузчик :

getLoaderManager().initLoader(0, null, this).forceLoad(); 

и последняя деталь для комментариев - как реализован фрагмент t он обратный вызов погрузчика:

public class FragmentName extends CustomFragment implements LoaderManager.LoaderCallbacks<String> 

Посмотрите, сможет ли кто-нибудь помочь мне в том, как его реализовать. Заранее спасибо.

ответ

1

Вы должны позвонить по телефону super.deliverResult(apps) по телефону deliverResult. В противном случае суперкласс вашего CustomAsyncLoader не позаботится о доставке результата зарегистрированному слушателю.

+0

Спасибо. Это решает проблему –

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