SlidingTabLayout选项卡之间的通信

我已经search了很多关于如何使用SlidingTabLayout进行片段之间的通信,但并没有真正得到一个好的答案。 我知道使用ActionBar,但我想要的是使用SlidingTabLayout的android棒棒糖的新方法。 我试过这个 – > http://android-er.blogspot.in/2012/06/communication-between-fragments-in.html但我想要材料devise。 我提到这个链接http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html使材料devise滑动标签。 现在我想知道如何沟通滑动标签 。 我试了很多,但找不到我正在寻找的答案。 任何帮助将非常感激。

Solutions Collecting From Web of "SlidingTabLayout选项卡之间的通信"

最简洁的方法是定义一个包含FragmentActivity将执行的接口。 这是我最近解决这个问题的方法:

首先在自己的文件中定义接口,因为它必须对其他类可见。

 public Interface FragmentCommunication { public void printMessage(String message); .... } 

在你的Activity你需要实现这个接口

 public class MainActivity extends ActionBarActivity implements FragmentCommunication { .... public void printMessage(String message) { System.out.println(message); } } 

最后在你的Fragment你可以用getActivity()来获得主机的Activity ,并且使用通信方法只是把这个活动投入到实现的通信接口中,如下所示:

 ((FragmentCommunication) getActivity()).printMessage("Hello from Fragment!"); 

编辑 :要进一步传递消息到其他Fragment s做到这一点:因为你的标签都扩展Fragment这是最好的创build另一个接口

 public Interface ReceiverInterface { public void receiveMessage(String str); } 

然后在你的标签中实现这个

 public class Tab1 extends Fragment implements ReceiverInterface { .... code ..... public void receiveString(String str) { //use str } } 

为了进一步将此消息发送给其他碎片,需要活动看到它们。 例如,现在修改Activity实现的printMessage()

  public void printMessage(String message) { System.out.println(message); //Send the message that came from one fragment to another if (tabFragment1 instanceof ReceiverInterface){ ((ReceiverInterface) tabFragment1).receiveMessage(message); } } 

滑动标签( ViewPager )时,可以使用相同的Fragment或使用不同的Fragments

正如你之前提到的,你试过这个 ,所以我要用不同的Fragments去做。

你要做的是基本上使用EventBus : https : //github.com/greenrobot/EventBus 。

将它添加到位于app文件夹内的build.gradle依赖项。

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' compile 'de.greenrobot:eventbus:2.4.0' } 

你也可以通过使用Intents实现它。

1 – 创build一个类来表示事件,当您的文本更改:

 public class TextChangedEvent { public String newText; public TextChangedEvent(String newText) { this.newText = newText; } } 

2 – 片段A:

 //when text changes EventBus bus = EventBus.getDefault(); bus.post(new TextChangedEvent(newText)); 

3 – 片段B:

 EventBus bus = EventBus.getDefault(); //Register to EventBus @Override public void onCreate(SavedInstanceState savedState) { bus.register(this); } //catch Event from fragment A public void onEvent(TextChangedEvent event) { yourTextView.setText(event.newText); } 

资料来源: https : //stackoverflow.com/a/20475430/1549700

使用EventBus GitHub库。 这是目前最简单,最方便的方法。 https://github.com/greenrobot/EventBus