我正在尝试从片段屏幕调用活动中的方法。
我有一个名为 myMethod() 的方法,它位于名为 MyActivity 的活动中;我有一个名为 Screen1Fragment 的片段。
我想从 Screen1Fragment 内部调用 MyActivity.myMethod() 但我不知道该怎么做。
以前 Screen1Fragment 是一个活动,所以我扩展了 MyActivity,以便我可以直接调用 myMethod()。但是我不得不将活动更改为用于滑动标签使用的片段。
提前致谢。
我正在尝试从片段屏幕调用活动中的方法。
我有一个名为 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 的重点是您可以在不同的上下文中通过不同的活动重用它们。为了实现这一点,并且仍然能够从您的 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() 上调用您的方法之间的区别在于,您的片段不再与此特定活动配对。因此,您可以将其重新用于其他活动,例如一个用于手机,另一个用于平板电脑。
如果该方法是 MainActivity 的静态方法,类似于:
public static void someMethod(){}
然后,它非常简单。打电话
MainActivity.someMethod()
但是,我想您真正想要的是从 Activity 类中访问某些功能。然后您可以在 Fragment 视图创建器中使用以下代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
container.getContext().someMethod();
}