繁体   English   中英

在活动之间传递“数据源”

[英]Passing 'data source' between activities

我想要一个通用的“选择器”活动-该活动可以提供抽象数据源,从所述数据源中提取数据,将数据显示在ListView然后将所选项目返回到调用活动中。 非常类似于RingtonePickerActivity

我不知道如何将通用数据源从一个活动传递到另一个活动。 到目前为止,在活动之间共享数据方面,我所看到的只是通过Intent的Extras传递数据。 但这对我来说似乎不起作用,因为我不想提供实际数据-我想传递对抽象数据源的引用,可以查询该数据源(与Cursor不同)。

我想强调的一点是,我希望选择器getItemName实际的数据源-抽象数据源将提供诸如getNextItemgetItemNamegetItemValue 我能想到的最好的模型是游标或迭代器-迭代数据集的纯抽象机制。

由于应用程序的所有活动都在同一进程中托管,因此应该可行吗? 不想做的一件事是,出于多种原因(在我的应用程序中有一个全局数据源变量)(其中之一是我将使用多个数据源运行多个选择器活动)-我想提供在开始时间启动的活动的数据。

可能吗? 我被误导了吗? 有没有更好的办法?

但这对我来说似乎不起作用,因为我不想提供实际数据-我想传递对抽象数据源的引用,可以查询该数据源(与Cursor不同)。

传递一个额外的或Uri来标识抽象数据源。 使用该信息来查询该数据源。

例如,假设“抽象数据源”是Web服务。 您的活动将需要对Web服务有足够的了解,才能知道返回哪种数据,仅因为该活动必须具有该数据的呈现规则(即,列表中的行显示什么)。 但是,Web服务的实际URL可能有所不同。 将该URL作为额外的或作为Intent的“数据”(通过setData(Uri.parse(theUrlThatYouWant)) 。然后,您的活动可以使用Retrofit之类的东西在后台线程中检索数据,并在清单。

由于我们不知道您的“抽象数据源”是什么,因此我们无法随时为您提供进一步的帮助。 通常,传递给活动的是一些标识符,该标识符使活动可以查找数据源。 您用于标识符以及用于该查找机制的内容取决于您自己,并且可能与“抽象数据源”有关。

欢迎使用由任意数据源填充的通用UI,但是这些任意数据源不能通过Intent传递,因为Intent对象被设计为跨进程边界传递。 您的主要选择是:

  1. 使用继承和多态性。 具有一个抽象选择器活动来完成大部分工作,其子类可以在给定简单标识符的情况下获取数据。

  2. 使用一些不活动的UI(例如片段),因为您不再受Intent结构的限制,并且可以绕过任何需要的内容。

我只知道这些围绕活动传递数据的方法。

  1. 通过意图传递数据。

  2. 如果您的数据是在Service内部创建的,则可以在两个活动中都创建一个ServiceConnection,并且可以通过在服务内部都具有getData()方法来访问数据。

  3. 使数据成为全局数据或临时全局数据(使用完引用后将其无效,以释放内存)

  4. 通过意图传递某种形式的指令,以便新的Activity可以重新创建相同的数据。 例如,如果您的数据来自查询数据库,则可以将查询作为字符串传递给活动B。然后活动B可以执行该查询并获取相同的数据。

另外,也许您想从另一个方向进行。 例如,我使用过很多次的是选择对话框而不是选择活动。 这样,您无需离开活动就可以显示选择器,只需将数据传递给Dialog构造函数即可。 而且,您可以将对话框配置为全屏显示,以便它与用户对活动的外观相同。 片段也可以达到相同的目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM