android - 与其他 fragment 通信 - 为什么最佳实践改变了

标签 android android-fragments android-activity

为什么 Android 团队将最佳实践更改为如何将接口(interface)分配给 fragment 。

在 fragment onAttach(context: Context) 之前,我们将上下文转换为接口(interface)。

private lateinit var onHeadlineSelectedListener: OnHeadlineSelectedListener

override fun onAttach(context: Context?) {
    super.onAttach(context)
    onHeadlineSelectedListener = activity as OnHeadlineSelectedListener
}

现在 Android 建议在 onAttachFragment() 上执行此操作,链接如下:

class MainActivity : Activity(), HeadlinesFragment.OnHeadlineSelectedListener {
    // ...

    fun onAttachFragment(fragment: Fragment) {
        if (fragment is HeadlinesFragment) {
            fragment.setOnHeadlineSelectedListener(this)
        }
    }
}

https://developer.android.com/training/basics/fragments/communicating#kotlin

最佳答案

现在最好使用 viewModel 来保存数据或 Action 的状态,并且您可以在两者之间拥有实时数据

1.so创建activity然后创建SheredViewModel

2.添加livedata:LiveData

  1. 通过 viewModelProviders.of(this)[SheredViewModel] 将您的 View 模型添加到您的 Activity 中

  2. 如果您想监听 Activity 中的变化或其他任何地方的变化,请在 Activity 中添加观察者

  3. 转到您的 fragment 添加 viewModelProviders.of(activity)[SheredViewModel]

  4. 现在在这种情况下,如果您将任何数据发布到 liveData:LiveData,任何人都可以优雅而干净地收听您的更改

你可以在这个链接中查看这个例子的android文档

https://developer.android.com/topic/libraries/architecture/viewmodel

关于android - 与其他 fragment 通信 - 为什么最佳实践改变了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123809/

相关文章:

java - 将动态字符串传递给 Activity

android - 如何在 Android 上指定仅适用于手机或平板电脑的 Activity

android - 通过 RTMP android 连接到闪存媒体服务器

java - 检查文件何时在 Eclipse 中完成下载

android - FragmentTabHost 和异步任务

android - 当 Viewpager 有任何其他布局作为其兄弟时,它不可见

android - 单个 XML、多个 Activity 以及性能

javascript - 安卓 WebView : Execution of javascript from java method called from javascript

javascript - React Native 动画组件在平移时被覆盖

android-listview - 替换片段时无法在 PagerSlidingTabStrip 中加载选项卡