Ответ 1
Вам нужно реализовать onStartLoading()
и вызвать forceLoad()
где-то в этом методе.
См. это сообщение для получения дополнительной информации: Реализация загрузчиков (часть 3)
У меня есть фрагмент и вы хотите запустить загрузчик при нажатии кнопки:
public class MyFragment extends Fragment {
public void onActivityCreated() {
super.onActivityCreated();
Button btn = ...;
btn.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
getLoaderManager().initLoader(500, null, mMyCallback);
}
});
}
private LoaderManager.LoaderCallbacks<String> mMyCallback = new LoaderManager.LoaderCallbacks<String>() {
@Override
public Loader<String> onCreateLoader(int arg0, Bundle arg1) {
Log.e(TAG, "LoaderCallback.onCreateLoader().");
return new MyLoader(getActivity());
}
}
}
public class MyLoader extends AsyncTaskLoader<String> {
public MyLoader(Context context) {
super(context);
}
@Override
public String loadInBackground() {
Log.e(TAG, "Hi, running.");
return "terrific.";
}
}
После нажатия кнопки я могу вызвать вызов callback onCreateLoader, но созданный загрузчик никогда не запускается. Нужно ли нам вызвать forceLoad() на самом загрузчике, чтобы запустить его? Ни один из этих сообщений не делает этого,
Спасибо
Вам нужно реализовать onStartLoading()
и вызвать forceLoad()
где-то в этом методе.
См. это сообщение для получения дополнительной информации: Реализация загрузчиков (часть 3)
По моему опыту, он никогда не работал, если я не использовал forceLoad()
.
Вы можете найти ответ на этот предыдущий вопрос: Погрузчики в Android Honeycomb
Три важных момента для погрузчиков:
Всегда используйте метод forceLoad()
при инициализации Loaders. Например:
getLoaderManager().initLoader(500, null, mMyCallback).forceLoad();
Всегда выполняйте onStartLoading()
. Эта функция будет автоматически вызываться LoaderManager
при запуске соответствующего фрагмента/активности.
Убедитесь, что идентификатор загрузчика уникален, иначе новый Loader не будет вызываться.
Если по-прежнему существует проблема, вы можете проверить состояние загрузчика, вызвав метод isStarted()
.
Вам нужно сохранить ссылку на экземпляр загрузчика, созданного в методе onCreateLoader
. Затем, чтобы обновить его, вызовите yourLoader.onContentChanged();
Если у вас более одного загрузчика в одном и том же действии, убедитесь, что их идентификатор отличается. Я потерял несколько часов, чтобы понять это:)