在同一个Activity下实现两个Fragment之间的通信

界面的架构为:一个Activity里面嵌套若干个Fragment,通过侧滑导航栏切换Activity中的Fragment。

为什么要把这篇文章单独拿出来而不放在开发笔记中呢,因为感觉这个比较难实现,其实也不是难实现,而是我在写的过程中尝试了几种方法,最终实现了我想要的功能,故在此记下,以免忘记。

那么我想实现的功能是什么?

我做的是一个翻译app(即将上线),其中想实现通信的是TranslateFragment和WordbookFragment,即翻译Fragment和单词本Fragment,实现的功能是在单词本中长按某个单词然后查看该单词的具体释义,然后跳转到翻译界面实现翻译然后获取具体释义。

单词本

 

长按查看具体释义

 

在翻译界面查看该词具体含义

 

 


实现方法其实挺简单,分三个步骤:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的例子: 首先,我们需要创建两个FragmentFragmentA 和 FragmentB。 在 FragmentA ,我们需要定义一个 ViewModel,并且在 ViewModel 定义一个 LiveData 对象用于传递数据。 FragmentA.kt: ``` class FragmentA : Fragment() { private lateinit var viewModel: FragmentAViewModel override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val binding = FragmentABinding.inflate(inflater, container, false) viewModel = ViewModelProviders.of(this).get(FragmentAViewModel::class.java) // 设置点击事件,将数据传递到 ViewModel binding.btnSend.setOnClickListener { viewModel.setData(binding.etInput.text.toString()) } return binding.root } } ``` FragmentAViewModel.kt: ``` class FragmentAViewModel : ViewModel() { private val data = MutableLiveData<String>() fun setData(str: String) { data.value = str } fun getData(): LiveData<String> { return data } } ``` 在 FragmentB ,我们需要获取 FragmentAViewModel 的 LiveData 对象,并且观察数据的变化。 FragmentB.kt: ``` class FragmentB : Fragment() { private lateinit var viewModel: FragmentAViewModel override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val binding = FragmentBBinding.inflate(inflater, container, false) viewModel = ViewModelProviders.of(activity!!).get(FragmentAViewModel::class.java) // 观察数据的变化 viewModel.getData().observe(this, Observer<String> { data -> binding.tvOutput.text = data }) return binding.root } } ``` 这样,当我们在 FragmentA 点击按钮时,数据就会被传递到 FragmentAViewModel ,并且通过 LiveData 对象传递到 FragmentB ,并且在 FragmentB 的 TextView 显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值