java - 在 Activity 之间传递 'data source'

标签 java android android-activity

我想要一个通用的“Chooser” Activity - 可以提供抽象数据源,从所述源中提取数据,在 ListView 中显示数据并返回所选项目调用 Activity 。与 RingtonePickerActivity 非常相似的东西。

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

我想强调的一点是,我希望选择器不知道实际的数据源 - 抽象数据源将提供诸如 getNextItemgetItemName< 之类的方法getItemValue。我能想到的最好的模型是游标或迭代器——一种迭代数据集的纯粹抽象机制。

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

这可能吗?我是不是被严重误导了?有更好的办法吗?

最佳答案

But that doesn't seem to work for me here, since I do not want to provide the actual data - I want to pass a reference to abstract data source, which can be queried (not unlike the Cursor).

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

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

由于我们不知道您的“抽象数据源”是什么,因此我们无法轻易为您提供进一步帮助。一般来说,您传递给 Activity 的是一些允许 Activity 查找数据源的标识符。您使用的标识符和查找机制取决于您,并且可能与“抽象数据源”是什么相关。

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

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

  2. 使用一些非 Activity UI,例如 fragment ,因为您不再受到 Intent 结构的限制,并且可以传递所需的任何内容。

关于java - 在 Activity 之间传递 'data source',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37499216/

相关文章:

java下载word文档,内容显示为十六进制

java - 打开 Activity 期间应用程序崩溃

android-activity - Activity 导航 : custom animation with popEnter and popExit like fragments

java - 如何在Android Studio中的EditText中填充 float 和整数

android - 带有计时器的服务调用另一个服务

java - 使用序列化深度克隆后 hibernate 延迟加载异常

java - 在方法中使用变量的问题

Java:XML 到对象(或数组)

android - 找不到与给定名称相匹配的资源 Android 1.6

android - 如何在 RoomDatabase 中存储 Enum 的 ArrayList