从片段内部调用活动方法

时间:2013-11-01 12:24:01

标签: android android-fragments android-activity android-fragmentactivity

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

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

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

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

提前致谢。

3 个答案:

答案 0 :(得分:38)

在片段中使用getActivity()

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

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

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

答案 1 :(得分:22)

您应该使您的片段完全独立于您附加的活动。 Fragments的观点是,您可以在具有不同活动的不同上下文中重用它们。要实现这一目标,并且仍然能够通过official documentation中推荐的以下模式调用您的Activity中的方法。

在您的片段中

  • 使用方法

    定义公共接口
    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()上调用方法之间的区别在于,您的片段不再与此特定活动配对。因此,您可以将其与其他活动重复使用,例如一个用于手机,另一个用于平板电脑。

答案 2 :(得分:0)

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

    public static void someMethod(){}

然后,它非常简单。只需致电

   MainActivity.someMethod()

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

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState){

        container.getContext().someMethod();

   }