最简洁的方法是定义一个接口,包含
Fragment
的
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);
}
}
最后,在您的Fragment
中,您可以使用getActivity()
方法获取托管的Activity
,并且要使用通信方法,只需将活动转换为实现的通信接口即可,如下所示:
((FragmentCommunication) getActivity()).printMessage("Hello from Fragment!");
编辑:为了将消息进一步传递给其他Fragment
,请执行以下操作:由于您的选项卡都扩展了Fragment
,因此最好创建另一个接口。
public Interface ReceiverInterface
{
public void receiveMessage(String str);
}
然后在您的选项卡中实现这一点。
public class Tab1 extends Fragment implements ReceiverInterface
{
public void receiveString(String str)
{
}
}
为了将此消息进一步发送到其他片段,需要活动看到它们。例如,现在修改Activity实现的printMessage()为以下内容:
public void printMessage(String message)
{
System.out.println(message);
if (tabFragment1 instanceof ReceiverInterface){
((ReceiverInterface) tabFragment1).receiveMessage(message);
}
}