gpt4 book ai didi

java - Android - 将多个 ASyncTaskLoader 类作为 InnerClasses 放入 "manager"类中

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:55 25 4
gpt4 key购买 nike

下午好,我正在开发一个具有 CustomObjects ArrayList 的 Android 应用程序。

这些对象是在运行时生成的,它们的属性是根据 SQLite 数据设置的。由于我使用的是 SQlite,因此我需要使用某种 AsyncTask,并且我相信 AsyncTaskLoader 符合要求。

我想创建某种“管理器”类来管理这些自定义对象的创建/加载/更新(有 3 种自定义对象类型)。我想要做的是创建“Manager”类并拥有 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。我遵循了任务加载器的一些指南,并设法让它们加载我的光标并异步创建我的对象。我还创建了一个接口(interface)来与我的 MainActivity 通信这些内部类,以通知 ListViews 有新数据要显示。

最佳答案

I want to create some sort of "Manager" class that will manage the creation/loading/updating of these custom objects...

这正是 LoaderManager 的目的...跨单个 Activity/fragment 实例管理一个或多个加载器。在我看来,创建一个单独的 ObjectManager 类,其唯一目的是充当加载器的包装器,只会使您的 Activity/fragment 逻辑变得复杂。只需让您的 Activity 实现 LoaderManager.LoaderCallbacks 接口(interface),您就可以实现完全相同的效果,而无需额外的代码。

关于java - Android - 将多个 ASyncTaskLoader 类作为 InnerClasses 放入 "manager"类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24167166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com