Java 通过';数据源';活动之间
我希望有一个通用的“选择器”活动-可以提供抽象数据源,从所述源提取数据,在Java 通过';数据源';活动之间,java,android,android-activity,Java,Android,Android Activity,我希望有一个通用的“选择器”活动-可以提供抽象数据源,从所述源提取数据,在列表视图中显示数据,并将所选项目返回调用活动。非常类似于铃声活动的东西 我搞不懂的是如何将通用数据源从一个活动传递到另一个活动。到目前为止,我所看到的在活动之间共享数据的方法是通过Intent的额外功能传递数据。但在这里,这似乎对我不起作用,因为我不想提供实际数据——我想传递一个对抽象数据源的引用,它可以被查询(与光标不同) 我想强调的一点是,我希望选择器不知道实际的数据源-抽象数据源将提供类似getNextItem,ge
列表视图中显示数据,并将所选项目返回调用活动。非常类似于铃声活动的东西
我搞不懂的是如何将通用数据源从一个活动传递到另一个活动。到目前为止,我所看到的在活动之间共享数据的方法是通过Intent
的额外功能传递数据。但在这里,这似乎对我不起作用,因为我不想提供实际数据——我想传递一个对抽象数据源的引用,它可以被查询(与光标
不同)
我想强调的一点是,我希望选择器不知道实际的数据源-抽象数据源将提供类似getNextItem
,getItemName
,getItemValue
的方法。我能想到的最好的模型是游标或迭代器——一种对数据集进行迭代的纯抽象机制
因为应用程序的所有活动都托管在同一进程中,所以这应该是可能的吗?我不想做的一件事是在我的应用程序中有一个全局数据源变量,原因有很多(其中之一是我将使用多个数据源运行多个选择器活动)-我想在开始时向正在启动的活动提供数据
可能吗?我真的被误导了吗?有更好的办法吗
但在这里,这似乎对我不起作用,因为我不想提供实际的数据——我想传递一个对抽象数据源的引用,这个抽象数据源可以被查询(与游标不同)
传递标识抽象数据源的额外或Uri
。然后使用该信息查询该数据源
例如,假设“抽象数据源”是一个Web服务。您的活动需要对Web服务有足够的了解,才能知道返回的数据类型,这仅仅是因为该活动必须具有该数据的呈现规则(即,列表中的行显示什么)。但是,Web服务的实际URL可能有所不同。将URL作为额外的,或作为意图的“数据”(通过setData(Uri.parse(theUrlThatYouWant))
传递。然后,您的活动可以使用类似于改型的方法在后台线程中检索数据,并使用列表中的结果
由于我们不知道您的“抽象数据源”是什么,我们无法进一步帮助您。一般来说,您传递给活动的是允许活动查找数据源的某个标识符。您使用的标识符和查找机制取决于您,并且可能与“抽象数据源”相关是
欢迎您使用由任意数据源填充的通用UI,但这些任意数据源不能通过Intent
传递,因为Intent
对象旨在跨流程边界传递。您的主要选择是:
使用继承和多态性。有一个抽象选择器活动来完成大部分工作,子类可以获得给定简单标识符的数据
在活动UI中使用一些,例如片段,因为您不再受Intent
结构的限制,可以传递任何需要的内容
但在这里,这似乎对我不起作用,因为我不想提供实际的数据——我想传递一个对抽象数据源的引用,这个抽象数据源可以被查询(与游标不同)
传递标识抽象数据源的额外或Uri
。然后使用该信息查询该数据源
例如,假设“抽象数据源”是一个Web服务。您的活动需要对Web服务有足够的了解,才能知道返回的数据类型,这仅仅是因为该活动必须具有该数据的呈现规则(即,列表中的行显示什么)。但是,Web服务的实际URL可能会有所不同。将URL作为额外的URL传递,或作为意图的“数据”(通过setData(Uri.parse(theUrlThatYouWant))
传递。然后,您的活动可以使用类似翻新的方法在后台线程中检索数据,并使用列表中的结果
由于我们不知道您的“抽象数据源”是什么,我们无法进一步帮助您。一般来说,您传递给活动的是允许活动查找数据源的某个标识符。您使用的标识符和查找机制取决于您,并且可能与“抽象数据源”相关是
欢迎您使用由任意数据源填充的通用UI,但这些任意数据源不能通过Intent
传递,因为Intent
对象旨在跨流程边界传递。您的主要选择是:
使用继承和多态性。有一个抽象选择器活动来完成大部分工作,子类可以获得给定简单标识符的数据
在活动UI中使用一些,例如片段,因为您不再受Intent
结构的限制,可以传递任何需要的内容
我只知道这些在活动中传递数据的方法
通过意图传递数据
如果数据是在服务中创建的,则可以在两个活动中创建ServiceConnection,并通过服务中的getData()方法从这两个活动访问数据
将数据设为全局或临时全局(使用完引用后将其置零,以便释放内存)
通过intent传递某种形式的指令,以便新活动可以重新创建