我已经搜索了很多关于如何使用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来制作材料设计滑动标签。 现在我想知道如何在滑动标签之间进行通信。我已经尝试了很多,但找不到我想要的答案。 任何帮助都会非常感激。
答案 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
。
您要做的主要是使用EventBus
:https://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
来实现它。
public class TextChangedEvent {
public String newText;
public TextChangedEvent(String newText) {
this.newText = newText;
}
}
//when text changes
EventBus bus = EventBus.getDefault();
bus.post(new TextChangedEvent(newText));
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);
}
答案 2 :(得分:0)
使用EventBus GitHub库。这是目前最简单,最方便的方式。 https://github.com/greenrobot/EventBus