【发布时间】:2021-03-14 22:57:18
【问题描述】:
我只是想从我的 MainActivity 中调用 Fragment 方法。
所以我尝试使用接口。
public interface MyInterface {
void testMethod();
}
在我的 Fragment (TestFragment.java) 中,我实现了接口并覆盖了 testMethod 方法。
@Override
public void testMethod() {
Toast.makeText(getActivity(), "Test", Toast.LENGTH_LONG).show();
}
但现在我想在调用 onRewardedVideoCompleted get 后立即从 MainActivity 调用此方法,但我不知道该怎么做。 我试过这样:
MyInterface myInterface = new TestFragment();
myInterface.testMethod();
但在这里我得到一个 nullPointerException:
尝试调用虚拟方法'java.lang.String android.content.Context.getPackageName()' 在空对象引用上 指的是 Toast 消息。
如何在我的 MainActivity 中从我的接口调用方法而不会收到 NullPointerException?
谢谢
【问题讨论】:
-
您创建了一个新片段,但未将其附加到任何活动。要显示 Toast,您需要一个上下文(在本例中是片段已附加到的活动)。因为活动是
null,所以应用程序崩溃了。您需要使用 FragmentManager 的 add/replace 方法将 Fragment 附加到一个 Activity,然后直接调用 Fragment 的方法。这种情况下不需要使用接口。 -
@SonTruong 我必须使用一个接口,因为我有一个管理所有子片段的 TabFragment。因此,在我的 MainActivity 中,我使用 FragmentManager 将 ViewLayout 替换为 TabFragment。 TabFragment 包含 2 个片段,我想在其中一个片段中调用一个方法,而不是从 TabFragment 调用。所以这种情况下是不能使用 FragmentManager 的吧?
-
Fragment 由 Activity 管理,子 Fragment 由 Parent Fragment 管理。如果你想从一个activity调用一个子fragment的方法,那么你从activity调用fragment上的一个方法,根据action/data,fragment会决定调用子fragment的对应方法。当您想从子片段调用父片段的方法或从片段调用活动的方法时,接口将很有用。因为它会增加activity/fragment之间的解耦,让fragment更加可重用。
标签: java android interface nullpointerexception fragment