【问题标题】:Basic Communication between two fragments and set id for fragment on class两个片段之间的基本通信并为类上的片段设置 id
【发布时间】:2018-08-20 08:32:16
【问题描述】:

我有一个活动 - MainActivity。在这个 Activity 中,我有两个片段,这两个片段都是我在 XML 中以声明方式创建的。

我正在尝试将用户输入的文本字符串传递到片段 A 中的片段 B 中的文本视图。但是事实证明这非常困难。有谁知道我如何做到这一点?

我知道片段可以使用getActivity() 获取对其活动的引用。所以我猜我会从那里开始? 如何在适配器中为片段设置 id

我使用滑块库: https://github.com/stepstone-tech/android-material-stepper

【问题讨论】:

标签: android android-fragments android-activity


【解决方案1】:

您可以使用Fragment#setTargetFragmentFragment#getTargetFragment 查看文档here

在您的 MainActivity 中您可以执行以下操作:

fragment1.setTargetFragment(fragment2)

在 fragment1 中你可以使用 typeCast

class Fragment1 extends Fragment {

    private void passInput(String string) {
        ((Fragment2) getTargetFragment())
            .updateTextView(string);
    }

}

对于具有多个片段的更复杂的数据处理,您应该使用 MVVM 模式,其中视图模型注册到活动生命周期,每个片段都可以与该实例通信并观察数据变化。

【讨论】:

  • 因为我为这个库使用了特殊的适配器,而不是扩展 fragmentActvity
  • 好的,看看 MVVM 模式,一旦你理解了它,它一定会对你有所帮助。祝你好运
【解决方案2】:

要在两个片段之间进行通信,最好使用通信器接口 1-使您的活动实现一个接口,其中包含更改数据的方法 2-将该接口传递给您的片段

您可能会发现此链接很有帮助https://developer.android.com/training/basics/fragments/communicating

【讨论】:

  • 我正在阅读此内容,但无法识别我的片段,因为我为此库使用了特殊的适配器并且没有扩展 fragmentActvity
【解决方案3】:

我正在尝试将用户输入的文本字符串传递到 Fragment A 到片段 B 中的文本视图。但是事实证明这是非常 难的。有谁知道我如何做到这一点?

您可以使用EventBus 库轻松实现这一目标

在片段 A 中

EventBus.getDefault().post(new MessageEvent(text));

public static class MessageEvent {
    String text;

    public MessageEvent(String text) {
        this.text = text;
    }
}

在片段 B 中

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(FragmentA.MessageEvent event) {
Log.d(“akshay”,”text= ”+event.text)
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多