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

时间:2014-11-12 14:56:09

标签: android android-fragments android-contentprovider android-cursorloader

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

列表中的人口并不那么难,但是如何将选择传递给细节片段(在同一活动或其他活动中)​​?我应该再次查询并返回详细信息中使用的结果吗?

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

我认为为此,我需要分享Cursor返回的CursorLoader以保持相同的顺序。然后滑动将增加/减少索引并显示正确的项目。

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

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

目前我有2个活动列表详细信息列表具有双面板和单面板布局以及列表片段< / em>使用详细信息片段详细信息只有单个窗格,其中包含详细信息片段。我想我可以将它简化成一个单独的活动并且处理片段,但不知道它是否会好。

2 个答案:

答案 0 :(得分:1)

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

        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

编辑:自上次评论以来,使用Serializable接口实现一个处理对象的类:

public class MyDBObject implements Serializable {
//Stuff
}

然后,当您从数据库中提取时,请返回MyDBObjectList<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

答案 1 :(得分:1)

我当时所做的是:

持有片段的

活动将执行:

  1. 实施LoaderManager.LoaderCallbacks<Cursor>
  2. 致电getSupportLoaderManager().initLoader(ALL_DATA_LOADER_ID, null, this);
  3. LoaderCallbacks的参数传递给也实现LoaderCallbacks
  4. 的片段
  5. 只要在getSupportLoaderManager().restartLoader(ALL_DATA_LOADER_ID, null, this);表示
  6. 之外更改数据,就会调用ContentProvider

    这样我就在片段之间共享相同的光标。在活动之间,我正在交换(通过Intent)请求相同数据集和选择ID所需的数据。