SlidingTabLayout标签之间的通信

时间:2015-07-23 12:55:39

标签: android android-fragments material-design

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

3 个答案:

答案 0 :(得分:4)

最干净的方法是定义一个包含Activity的{​​{1}}将实现的接口。这就是我最近解决这个问题的方法:

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

Fragment

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获取托管Activity,并使用通信方法将活动投射到已实施的通信界面中,如下所示:

getActivity()

编辑:要将此消息进一步传递给其他((FragmentCommunication) getActivity()).printMessage("Hello from Fragment!"); ,请执行以下操作:由于您的标签均延伸Fragment,因此最好创建另一个界面

Fragment

然后在标签中实现此功能

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

要将此消息进一步发送到其他片段,则需要活动查看它们。例如,现在修改public class Tab1 extends Fragment implements ReceiverInterface { // .... code ..... public void receiveString(String str) { //use str } } 对此

实施的printMessage()
Activity

答案 1 :(得分:2)

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

正如您之前提到的,您尝试了this,因此我选择了不同的Fragments

您要做的主要是使用EventBushttps://github.com/greenrobot/EventBus

将其添加到位于build.gradle文件夹内的app个相关内容。

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 - 创建一个类来表示文本更改时的事件:

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

答案 2 :(得分:0)

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