bytedance / scene

Android Single Activity Framework compatible with Fragment.
Apache License 2.0
2.08k stars 198 forks source link

如何向 Scene 传输数据? #23

Closed chachako closed 4 years ago

chachako commented 4 years ago

Activity 有一个 Object 要传给 Scene,Scene支持构造函数吗,如果是View的话应该是可以交给setter的才对

qii commented 4 years ago

https://github.com/bytedance/scene/blob/master/library/scene/src/main/java/com/bytedance/scene/NavigationSceneUtility.java#L89

用 rootSceneComponentFactory,拦截创建个新的 Scene,把你的 Object 通过构造方法传入

chachako commented 4 years ago

感谢

chachako commented 4 years ago

那么当在 Scene 中 Push 另一个 Scene 时需要传输对象时呢?应该如何做

qii commented 4 years ago

你要支持销毁恢复吗?(就是那个 supportResotre),不支持的话(就是返回false),直接把你的对象放入构造方法参数呗,支持的话(就是返回true),写个 XXXXXScene.newIntance(YYY),只能把支持序列化的对象放入 Scene.setArguments

chachako commented 4 years ago

你要支持销毁恢复吗?(就是那个 supportResotre),不支持的话(就是返回false),直接把你的对象放入构造方法参数呗,支持的话(就是返回true),写个 XXXXXScene.newIntance(YYY),只能把支持序列化的对象放入 Scene.setArguments

是这样吗

        oneScene.requireNavigationScene().push(`TwoScene(obj, obj1)`, PushOptions.Builder().setAnimation(
            SharedElementSceneTransitionExecutor(
                map,
                Slide()
            )
        ).build())

TwoScene(obj, obj1) 但是好像会出错,昨天晚上好像是看到说不允许有参数,请问有示例代码吗@qii

qii commented 4 years ago
class MainActivity : SceneActivity() {
    override fun getHomeSceneClass(): Class<out Scene> {
        return MainScene::class.java
    }

    override fun supportRestore(): Boolean {
        return false //这里返回false
    }
}
qii commented 4 years ago

返回true就是强制支持销毁恢复,只允许序列化的对象传递,不允许Scene有其他其他的构造方法

chachako commented 4 years ago

@qii 另外,Activity 或 Fragment 如何与 Scene 通信

例如 Activity 有一个下载任务,下载完后我需要通知 Scene 已经下载完成

qii commented 4 years ago

在同个Activity内吗?如果是,用 ViewModel+LiveData,如果不是,用类似 EventBus 这种,订阅一个单例,下载完成的地方给这个单例发消息

chachako commented 4 years ago

ViewModel+LiveData

是指 Activity 与 Scene 使用同一个 ViewModel 吗

activity:

ViewModelProviders.of(this).get(MyViewModel::class.java)

scene:

ViewModelProviders.of(activity).get(MyViewModel::class.java)

qii commented 4 years ago

是的