Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过';数据源';活动之间_Java_Android_Android Activity - Fatal编程技术网

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传递某种形式的指令,以便新活动可以重新创建