最干净的方法是定义一个包含Fragments的Activity将实现的接口.这就是我最近解决这个问题的方法:
首先在它自己的文件中定义接口,因为它必须对其他类可见.
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);
}
}
最后在你的片段中,你可以使用getActivity()获取托管活动,并使用通信方法将活动强制转换为已实现的通信接口,如下所示:
((FragmentCommunication) getActivity()).printMessage("Hello from 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
}
}
要进一步将此消息发送到其他片段,需要活动查看它们.例如,现在修改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);
}
}