从片段内部调用活动方法

我试图从Fragment屏幕调用一个方法。

我有一个名为myMethod()的方法,它位于一个名为MyActivity的活动中; 我有一个名为Screen1Fragment的片段。

我想从Screen1Fragment中调用MyActivity.myMethod(),但我不知道该怎么做。

以前Screen1Fragment是一个活动,因此我扩展了MyActivity,以便我可以直接调用myMethod()。 但我不得不将活动更改为片段以滑动标签使用。

提前致谢。

在片段中使用getActivity()

 MyActivity activity = (MyActivity) getActivity(); activity.myMethod(); 

如果你不确定你的片段是否附加到MyActivity那么

  Activity activity = getActivity(); if(activity instanceof MyActivity){ MyActivity myactivity = (MyActivity) activity; myactivity.myMethod(); } 

你应该使你的片段完全独立于你附加它的活动。 Fragments的观点是,您可以在具有不同活动的不同上下文中重用它们。 为了实现这一点,仍然能够在您的活动中调用方法,在官方文档中推荐以下模式。

在你的片段中

  • 使用该方法定义公共接口

     public interface MyFragmentCallback{ public void theMethod(); } 
  • 定义一个字段并获得一个演员参考:

     private MyFragmentCallback callback; public void onAttach(Activity activity){ callback = (MyFragmentCallback) activity super.onAttach(activity); } 

在你的活动中

  • 在类定义中实现MyFragmentCallback
  • 在你的活动中实现theMethod() (Eclipse会要求你这样做)

然后,从你的片段中,你可以调用callBack.theMethod()

这个与简单地在getActivity()上调用方法之间的区别在于,您的片段不再与此特定活动配对。 因此,您可以将其与其他活动重复使用,例如一个用于手机,另一个用于平板电脑。

如果该方法是MainActivity的静态方法,则类似于:

  public static void someMethod(){} 

然后,它非常简单。 打电话吧

  MainActivity.someMethod() 

但是,我猜你真正想要的是从Activity类访问一些函数。 然后,您可以在Fragment视图创建器中使用以下代码

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ container.getContext().someMethod(); }