Android 如何在片段/活动之间共享游标

Android 如何在片段/活动之间共享游标,android,android-fragments,android-contentprovider,android-cursorloader,Android,Android Fragments,Android Contentprovider,Android Cursorloader,我正在尝试构建一个应用程序,该应用程序将使用片段构建列表/详细信息窗格。列表是从ContentProvider创建的。单击列表时,将填充详细信息或创建活动。在操作上类似于gmail应用程序。如何在片段/活动之间共享/传递数据 列表的填充并没有那么困难,但是我如何将选择传递给细节片段(在同一个活动或另一个活动中)?我应该再次查询并返回详细使用的结果吗 它需要像gmail应用程序一样,所以左/右滑动应该相应地更改详细信息,以与单窗格布局或双窗格布局中的列表相同的顺序 为此,我想我需要共享游标加载程序

我正在尝试构建一个应用程序,该应用程序将使用片段构建列表/详细信息窗格。列表是从
ContentProvider
创建的。单击列表时,将填充详细信息或创建活动。在操作上类似于gmail应用程序。如何在片段/活动之间共享/传递数据

列表的填充并没有那么困难,但是我如何将选择传递给细节片段(在同一个活动或另一个活动中)?我应该再次查询并返回详细使用的结果吗

它需要像gmail应用程序一样,所以左/右滑动应该相应地更改详细信息,以与单窗格布局或双窗格布局中的列表相同的顺序

为此,我想我需要共享
游标加载程序返回的
游标
,以保持相同的顺序。然后滑动将增加/减少索引,并显示正确的项目

另外,由于我已经加载了数据,所以我希望在没有新查询的情况下重用它

有人能给我指出正确的方向吗?你会怎么做来实现这个目标(没有代码,只有算法/步骤)


目前我有2个活动列表和详细信息,列表有双面板和单面板布局,使用了带有详细信息片段的列表片段,详细信息只有带有详细信息片段的单面板。我想我可以把它简化为一个单独的活动,并对片段进行处理,但不知道它是否好。

下面是一种将数据从一个活动传递到另一个活动的方法:

        intent = new Intent(this, ProductListActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable(PRODUCT_LIST, productList);
        bundle.putString(KEY_WORD, keyWord);
        intent.putExtras(bundle);
        startActivity(intent);
如果您在某个活动中,并且希望将数据传递给该活动中的某个片段,只需使用该片段中的setter即可

编辑:自上次注释以来,实现一个类以使用可序列化接口处理对象:

public class MyDBObject implements Serializable {
//Stuff
}
然后,当您从数据库获取数据时,返回或返回一个
MyDBObject
,或一个
列表

最后,当您需要传递数据时,只需使用

Intent intent = new Intent(SourceActivity.this, TargetActivity.class);
intent.putExtra("DB_OBJECTS", ArrayList<MyDBObject>mDBObject); // For a list
intent.putExtra("DB_OBJECT", mDBOject); //For a single object
Intent Intent=newintent(SourceActivity.this、TargetActivity.class);
intent.putExtra(“DB_对象”,ArrayListDBObject);//要一份清单
intent.putExtra(“DB_对象”,mDBOject)//对于单个对象
当时我做的是:

保存片段的活动将执行以下操作:

  • 实现
    LoaderManager.LoaderCallbacks
  • 调用
    getSupportLoaderManager()
  • LoaderCallbacks
    的参数传递给同样实现
    LoaderCallbacks
  • 调用
    getSupportLoaderManager(),
    这),每当数据在
    ContentProvider
    方法之外更改时

  • 这样,我在片段之间共享同一个游标。在活动之间,我交换(通过意图)请求相同数据集所需的数据和选择id(如果需要)。

    在意图的extrasI中传递id或完整Uri。在创建活动细节的意图时,我已更新了我的问题,传递用于获取原始光标的Uri,然后在“详细信息”活动中使用该Uri重新创建光标,没有光标是可包裹的,因此您无法通过extras传递光标如果您确实需要通过extras传递光标,请创建自定义AbstractWindowedCursor并使用可包裹的CursorWindow传递数据,只需传递Uri即可,谷歌的人没有创建一个可包裹的光标,所以我想他们是有目的的。是的,这就是我可以做的,我正在做的,但是如何传递光标(结果列表)以在详细信息视图中用于来回导航呢?或者我应该在详细信息视图中再次运行查询吗?是否存在竞争条件/并发错误的风险。如果两个不同的片段/视图共享一个游标,并且调用诸如cursor.moveToFirst()之类的方法,它们会不会有可能相互打乱?