在android中从另一个片段获取数据到片段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在android中从另一个片段获取数据到片段相关的知识,希望对你有一定的参考价值。

2 Fragments in Tab in Another Fragment

我有这个要求,我有一个主片段,其中有一个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

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());
另一答案

Fragments之间的沟通是通过父母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中从另一个片段获取数据到片段的主要内容,如果未能解决你的问题,请参考以下文章

Android从另一个片段设置Textview

热门从另一个片段导航到主页片段

如何在 Android 工作室中从现有活动创建片段

从另一个片段打开一个片段始终保留前一个片段标题

无法从片段中的 SQLite 获取数据

从另一个图表导航到片段,而不是起始目的地