Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何向 Scene 传输数据? #23

Closed
chachako opened this issue Jan 5, 2020 · 11 comments
Closed

如何向 Scene 传输数据? #23

chachako opened this issue Jan 5, 2020 · 11 comments

Comments

@chachako
Copy link

chachako commented Jan 5, 2020

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

@qii
Copy link
Member

qii commented Jan 5, 2020

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

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

@chachako
Copy link
Author

chachako commented Jan 5, 2020

感谢

@chachako chachako closed this as completed Jan 5, 2020
@chachako chachako reopened this Mar 2, 2020
@chachako
Copy link
Author

chachako commented Mar 2, 2020

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

@qii
Copy link
Member

qii commented Mar 3, 2020

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

@chachako
Copy link
Author

chachako commented Mar 3, 2020

你要支持销毁恢复吗?(就是那个 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
Copy link
Member

qii commented Mar 3, 2020

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

    override fun supportRestore(): Boolean {
        return false //这里返回false
    }
}

@qii
Copy link
Member

qii commented Mar 3, 2020

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

@chachako chachako closed this as completed Mar 3, 2020
@chachako
Copy link
Author

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

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

@chachako chachako reopened this Mar 11, 2020
@chachako chachako changed the title 怎么向Scene传输对象? 如何向 Scene 传输数据? Mar 11, 2020
@qii
Copy link
Member

qii commented Mar 11, 2020

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

@chachako
Copy link
Author

ViewModel+LiveData

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

activity:

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

scene:

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

@qii
Copy link
Member

qii commented Mar 11, 2020

是的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants