两个片段之间的基本通信,并在类上为片段设置ID

时间:2018-08-20 08:32:16

标签: android android-fragments android-activity

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

我试图将用户输入的文本字符串传递到片段A到片段B中的文本视图。但是事实证明这非常困难。有人知道我将如何实现这一目标吗?

我知道一个片段可以使用getActivity()对其活动进行引用。所以我猜我会从那里开始吗? 如何为适配器中的片段设置ID

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

  

我正在尝试将用户输入的文本字符串传递给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)
   }

答案 2 :(得分:0)

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

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

fragment1.setTargetFragment(fragment2)

在fragment1中,您可以使用typeCast

class Fragment1 extends Fragment {

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

}

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