1

下午好,我正在开发一个具有 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 有要显示的新数据。

4

1 回答 1

0

我想创建某种“管理器”类来管理这些自定义对象的创建/加载/更新......

这正是LoaderManager... 跨单个活动/片段实例管理一个或多个加载程序的目的。在我看来,创建一个单独ObjectManager的类,其唯一目的是作为加载器的包装器只会使您的活动/片段逻辑复杂化。只要让你Activity实现LoaderManager.LoaderCallbacks接口,你就可以在没有额外代码的情况下实现完全相同的东西。

于 2014-06-12T19:52:02.353 回答