下午好,我正在开发一个具有 CustomObjects ArrayLists 的 Android 应用程序。
这些对象是在运行时生成的,它们的属性是从 SQLite 数据中设置的。由于我使用的是 SQlite,我将需要使用某种 AsyncTask,我相信 AsyncTaskLoader 符合要求。
我想创建某种“管理器”类来管理这些自定义对象的创建/加载/更新(有 3 种自定义对象类型)。我想要做的是创建“管理器”类并拥有 3 个内部类,它们将扩展 AsyncTaskLoader(以及其他所需的各种功能)。
我的问题是,我的 MainActivity 如何与属于“Manager”类的这些内部类一起工作?MainActivity 将如何接收回调?还有比这更好的解决方案吗?
像这样的东西...
public class ObjectManager implements LoaderManager.LoaderCallbacks<ArrayList<Object>>{
private Context mContext;
private LoaderManager mLoaderManager;
private ObjectManagerCallBacks mObjectManagerCallBacks;
public ObjectManager(Context context, LoaderManager loaderManager){
this.mContext = context;
this.mObjectManagerCallBacks = (ObjectManagerCallBacks) context;
this.mLoaderManager = loaderManager;
mLoaderManager.initLoader(*id#1*,null,this);
mLoaderManager.initLoader(*id#2*,null,this);
mLoaderManager.initLoader(*id#3*,null,this);
}
public interface ObjectManagerCallBacks{
void contentUpdated(int loader,ArrayList<Object> newData);
}
@Override
public Loader<ArrayList<Object>> onCreateLoader(int id, Bundle args) {
switch (id){
case #1:
return new #1Loader(mContext);
case #2:
return new #2Loader(mContext);
case #3:
return new #3Loader(mContext);
default:
return null;
}
}
@Override
public void onLoadFinished(Loader<ArrayList<Object>> loader, ArrayList<Object> data) {
switch (loader.getId()){
case #1:
mObjectManagerCallbacks.contentUpdated(#1LOADER,data);
break;
case #2:
mObjectManagerCallbacks.contentUpdated(#2LOADER,data);
break;
case #3:
mObjectManagerCallbacks.contentUpdated(#3LOADER,data);
break;
default:
}
}
@Override
public void onLoaderReset(Loader<ArrayList<Object>> loader) {
switch (loader.getId()){
case WORKOUT_LOADER:
mObjectManagerCallbacks.contentUpdated(#1LOADER,null);
break;
case EXERCISE_LOADER:
mObjectManagerCallbacks.contentUpdated(#2LOADER,null);
break;
case USER_EXERCISE_LOADER:
mObjectManagerCallbacks.contentUpdated(#3LOADER,null);
break;
default:
}
}
//Various methods for object maintenance will go here
//And here
//And here...
private class LoaderTask1 extends AsyncTaskLoader<ArayList<CustomObject1>>{
}
private class LoaderTask2 extends AsyncTaskLoader<ArayList<CustomObject2>>{
}
private class LoaderTask3 extends AsyncTaskLoader<ArayList<CustomObject3>>{
}
}
谢谢大家的时间。
我的解决方案有效——
我最终在我的 CustomObjectManager 类中创建了 3 个内部类。这 3 个类扩展了 AsyncTaskLoader。我遵循了一些关于任务加载器的指南,并设法让它们加载我的光标以及异步创建我的对象。我还创建了一个接口来与我的 MainActivity 通信这些内部类,以通知 ListViews 有要显示的新数据。