从Fragment访问Activity

6
我正在尝试从片段更改活动标题(在这种情况下,它是一个android.support.v4.app.Fragment)。 为此,在片段上调用onAttach()时,我将活动保存在片段的属性中。根据文档,在请求用于填充视图的一些数据的onCreateView()之前,应该调用onAttach()。当我启动网络检索线程时,我想在标题中指示,因此我正在尝试从Fragment调用this.activity.setTitle()。但是,它仍然抛出一个NullPointerException。我错过了什么?

1
getActivity - adneal
是的,只需使用getActivity(); ..... - Dheeresh Singh
2个回答

15

您可以通过getActivity()在Fragment中访问Activity。只要在Fragment上调用了onActivityCreated(),就可以安全地调用它。在此之前,它可能不存在或尚未完全初始化。

如果您的线程在此之前启动,请在Fragment中记录此事实,并在调用onActivityCreated后才更改标题。


那似乎是有效的。不过,很奇怪的是,我在onAttach()中得到了我的Activity的实际实例,但我无法调用任何方法。 - djc
算了吧...看起来我的Fragment上甚至没有调用onActivityCreated()方法? - djc
好的,我忘记了onActivityCreated()的参数。虽然我在其中调用getActivity().setTitle(String),但它仍然抛出NullPointerException异常。 - djc
3
你确定真的是Activity为null吗?可能是标题为null?我可能错了,但我怀疑在没有实际存在Activity的情况下调用了onActivityCreated。 - Timo Ohr

0

现在你可以调用requiredActivity()方法,它会返回FragmentActivity对象。如果该片段不来自于一个活动,则该方法会抛出IllegalStateException异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接