Ait*_*mez 30 android asynctaskloader
我想使用兼容包在我的项目中实现AsyncTaskLoader,所以我遵循Android Docs中的Loader手册.
问题是Loader什么都不做,似乎loadInBackground()永远不会被调用
知道我的代码有什么问题吗?(ExpandableListFragment扩展Fragment,但不覆盖任何关键方法)
谢谢 :-)
/**编辑:
我意识到(最近,我是个白痴),AsyncTaskLoader是一个抽象类,所以我需要将它子类化... m(__)m我留下问题以防有人来到我身后,谁知道......
public class AgendaListFragment extends ExpandableListFragment implements
LoaderManager.LoaderCallbacks<JSONArray> {
private TreeMap<Integer, ArrayList<Evento>> mItems = new TreeMap<Integer, ArrayList<Evento>>();
private AgendaListAdapter mAdapter;
private ProgressBar mProgressBar;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_agenda, container);
mProgressBar = (ProgressBar) root.findViewById(R.id.loading);
return root;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new AgendaListAdapter(getActivity());
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<JSONArray> onCreateLoader(int arg0, Bundle arg1) {
mProgressBar.setVisibility(View.VISIBLE);
return new AsyncTaskLoader<JSONArray>(getActivity()) {
@Override
public JSONArray loadInBackground() {
return getDataFromService(AgendaServices.LISTADO_MES);
}
};
}
@Override
public void onLoadFinished(Loader<JSONArray> loader, JSONArray data) {
// Some stuff to turn JSONArray into TreeMap
mProgressBar.setVisibility(View.GONE);
mAdapter.setItems(mItems);
}
@Override
public void onLoaderReset(Loader<JSONArray> arg0) {
mAdapter.setItems(null);
mProgressBar.setVisibility(View.VISIBLE);
}
}
Run Code Online (Sandbox Code Playgroud)
Dav*_* S. 63
我认为兼容包的最佳解决方案是覆盖AsyncTaskLoader.onStartLoading方法.
例如
@Override
protected void onStartLoading() {
if(dataIsReady) {
deliverResult(data);
} else {
forceLoad();
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个修复,但它应该工作.我很确定兼容性库已被破坏.试试这个:
getLoaderManager().initLoader(0, null, this).forceLoad();
Run Code Online (Sandbox Code Playgroud)