我有一个片段,想要在点击一个按钮时启动一个加载器:
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.";
}
}
单击按钮后,我可以看到我的回调的onCreateLoader方法被调用,但创建的加载器实际上从未启动过。我们是否需要在加载器上调用forceLoad()来实际启动它?没有样本帖子这样做,
由于
答案 0 :(得分:32)
您需要实施onStartLoading()
并在方法中的某处调用forceLoad()
。
有关详情,请参阅此帖子:Implementing Loaders (part 3)
答案 1 :(得分:6)
根据我的经验,除非我使用forceLoad()
,否则它从未奏效。
您可能会发现上一个问题的答案有用: Loaders in Android Honeycomb
答案 2 :(得分:4)
关于装载机的三个要点是:
初始化加载程序时始终使用forceLoad()
方法。例如:
getLoaderManager().initLoader(500, null, mMyCallback).forceLoad();
始终实施onStartLoading()
。当关联的片段/活动开始时,LoaderManager
将自动调用此函数。
确保加载程序的ID是唯一的,否则将不会调用新的加载程序。
如果仍有问题,可以通过调用isStarted()
方法检查加载器的状态。
答案 3 :(得分:2)
您需要保留对您在方法onCreateLoader
中创建的加载程序实例的引用。然后,要刷新它,请致电yourLoader.onContentChanged();
答案 4 :(得分:2)
如果同一活动中有多个加载程序,请确保其ID不同。我失去了几个小时才弄明白:)