在识别LoaderManager中的加载器时,请使用唯一的ids。我问的是这些I必须有多独特。
每个活动和片段都有自己的LoaderManager吗?片段是否使用它们所附加的活动的LoaderManager?应用程序是否只拥有一个LoaderManager?
加分,如果你能告诉我如何改变你正在使用的LoaderManager是可能的。如果我希望我的活动中的每个片段都使用相同的LoaderManager (其中一些片段拉取相同的数据并共享Loaders会更好),这可能吗?
发布于 2015-01-06 13:47:57
是。这对我很管用。我在导航抽屉中有3个不同的片段,其中相同的数据填充在不同的ListViews中。(所有片段都是同一活动的一部分)。
我的AsyncTaskLoader:
public class MyTaskLoader extends AsyncTaskLoader<HashMap<String, Integer>> {
public MyTaskLoader(Context context) {
super(context);
}
@Override
public HashMap<String, Integer> loadInBackground() {
...
return hashMap;
}
...
}
在所有片段中使用相同的Loader Id。
Fragment1:
public class Fragment1 extends BaseFragment implements LoaderManager.LoaderCallbacks<HashMap<String, Integer>> {
@Override
public void onCreate(Bundle savedInstanceState) {
//initialize adapter
getActivity().getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<HashMap<String, Integer>> onCreateLoader(int arg0, Bundle arg1) {
// TODO Auto-generated method stub
return new MyTaskLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<HashMap<String, Integer>> arg0,
HashMap<String, Integer> data) {
// TODO Auto-generated method stub
listAdapter.setData(data.keySet());
}
@Override
public void onLoaderReset(Loader<HashMap<String, Integer>> arg0) {
// TODO Auto-generated method stub
listAdapter.setData(null);
}
}
对Fragment2使用相同的Id:
public class Fragment2 extends BaseFragment implements LoaderManager.LoaderCallbacks<HashMap<String, Integer>> {
@Override
public void onCreate(Bundle savedInstanceState) {
//initialize adapter
getActivity().getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<HashMap<String, Integer>> onCreateLoader(int arg0, Bundle arg1) {
// TODO Auto-generated method stub
return new MyTaskLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<HashMap<String, Integer>> arg0,
HashMap<String, Integer> data) {
// TODO Auto-generated method stub
listAdapter.setData(data.keySet());
}
@Override
public void onLoaderReset(Loader<HashMap<String, Integer>> arg0) {
// TODO Auto-generated method stub
listAdapter.setData(null);
}
}
应该在初始化加载器之前初始化适配器。到目前为止还行得通。但是,这是正确的方式吗?有没有更好的方法来使用多个片段的通用加载器?
https://stackoverflow.com/questions/7325668
复制相似问题