使用导航组件将自定义类型对象从片段传递到活动



我想使用Navigation ComponentFragment中的MediaStream对象传递给ActivityMediaStream类属于WebRTC。因此,我无法触摸它以使其可包裹或可序列化以传递对象。

以下是片段中的代码:

// Creating a PeerConnection with two callbacks 
// one is triggered when an ICE candidate is received
// the other one is triggered when a MediaStream is received
localPeer = peerConnectionFactory.createPeerConnection(
rtcConfig,
object: CustomPeerConnectionObserver("localPeerCreation"){
override fun onIceCandidate(iceCandidate: IceCandidate?) {
// not relevant for this talk 
}
override fun onAddStream(mediaStream: MediaStream?) {
super.onAddStream(mediaStream)
// TODO: create a new Activity and pass media stream to it for displaying
StreamsFragmentDirections.actionStreamsFragmentToStreamActivity(mediaStream)
}
})!!

正如TODO行所暗示的那样,我最初的目标是将MediaStream对象传递给应显示流的新活动。 但我不知道该怎么做。在导航图编辑器中,我选择了<inferred type>作为mediastream的类型,但这并没有按预期进行。这里,来自导航图xml布局的相关部分:

<activity
android:id="@+id/streamActivity"
android:name="com.john.elia.ui.activities.StreamActivity"
android:label="StreamActivity" >
<argument 
android:name="mediaStream" />
</activity>

但编译器抱怨说,它期望一个Int,但发现了一个MediaStream。 如何传递MediaStream对象?在我发现的所有示例中,它们只显示了如何传递原始类型,如字符串、Int 等。具有自定义类型的对象怎么样?

您可能无法使每种类型的对象都实现Parcelable,但通过遵循现代应用程序体系结构的原则,您不必再这样做了,另请参阅应用程序体系结构指南

一般的想法是将数据放在存储库(单一事实来源(中,Activitys和Fragment可以通过一些自定义类扩展ViewModel访问该存储库。

因此,一旦您在Fragment中获得任何类型的数据(MediaStream(,您应该将其传递给存储库,导航到下一个UI组件,并让它借助自己的ViewModel从存储库中获取数据。

相关内容

  • 没有找到相关文章

最新更新