在android中从另一个片段获取数据到片段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在android中从另一个片段获取数据到片段相关的知识,希望对你有一定的参考价值。
我有这个要求,我有一个主片段,其中有一个Tab有2片段,在那个屏幕“保存按钮”是固定的,在主片段。我想要做的是,当用户点击保存按钮时,我想通过从Main Fragment运行的服务保存Tab1和Tab2的碎片数据。意味着我想要将Tab Fragments的数据提取到Main Fragment。请帮助我,我搜索了很多,但没有找到任何解决方案,我尝试使用方法但它给我nullPointerException和片段没有附加错误。
我不使用Activity作为主屏幕因为我的主片段本身是一个Tab片段屏幕。
根据文档,不可能在片段之间直接通信
https://developer.android.com/training/basics/fragments/communicating.html
片段到片段的通信是通过关联的Activity完成的。两个碎片永远不应该直接通信
你必须使用接口来实现这一目标
在2个片段之间没有android中的直接通信,但是你可以使用subscribe和listen desgin模式来解决这个问题,你可以在你自己的接口和监听器上进行,你可以使用lib之类的
EventBus分三个步骤
定义事件:
public static class MessageEvent { /* Additional fields if needed */ }
准备订阅者:声明并注释您的订阅方法,可选择指定一个线程模式:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
注册和注销您的订阅者。例如,在Android上,活动和片段通常应根据其生命周期进行注册:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
发布活动:
EventBus.getDefault().post(new MessageEvent());
Fragment
s之间的沟通是通过父母Activity
完成的。 Fragment
应获取Activity
实例并将数据/事件传递给它。
活动应决定如何处理它 - 可能将其传递给其他一些片段或多个片段。
Activity可以通过FragmentManager
API获取附加的片段。
在你的TabFragment
中你应该调用activity(伪代码):
void onClickedSave() {
getActvity().onHandleClickedSave();
}
在活动中:
void onHandleClickedSave() {
tab1 = findTab1Fragment()
tab1.handleSave()
tab2 = findTab2Fragment()
tab2.handleSave()
}
当然,您需要自己实施管道。 https://developer.android.com/training/basics/fragments/communicating.html
顺便说一下,如果你使用MVVM设计模式,你的问题就会解决。 Android在支持库中支持它。
您无法直接在片段之间进行通信。片段之间有多种通信方式
- 使用Activity
- 使用Handler
- 使用界面
以上是关于在android中从另一个片段获取数据到片段的主要内容,如果未能解决你的问题,请参考以下文章