我有一个活动应用程序,其中包含许多碎片(大约15个)。我的MyActivity
中的某些方法是所有片段都需要的,例如显示Dialogs
。所以我在Fragment的一个示例调用中(以及它们都扩展为MyFragment
)的内容类似于:
getMyActivity().displayDialog(msg);
和getMyActivity
定义为MyFragment
:
MyActivity getMyActivity() {
return (MyActivity) getActivity();
}
然而,有时候getActivity()是null,所以在那种情况下我会得到NPE。所以我正在做的是将这些方法移动到MyFragment中:
protected void displayDialog(String msg) {
if (getMyActivity() != null) {
getMyActivity().displayDialog(msg);
} else {
// what do I do here?
}
}
这种方法对于我需要从MyActivity引用的10个左右方法是否有意义(这样做有什么陷阱)吗?另外,在getActivity()
为空的情况下,我该怎么做才能提供反馈?
编辑:NullPointerException原因的一个常见示例类似于Fragment调度的网络调用以及所述网络调用完成时,尝试在Activity
被破坏时显示对话框与此同时。
答案 0 :(得分:0)
最好使用一些ParentFragment例如
User
然后你必须加强所有你的片段
public abstract class ParentFragment extends Fragment {
public Activity activity;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.activity = activity;
}
}
并使用
的活动public class SomeFragment extends ParentFragment {}
答案 1 :(得分:0)
如果getActivity()的返回值== null,则片段未附加到父活动的FragmentManager中。
常见的错误是将这些片段的引用作为父活动中的对象变量。这导致了碎片中的NPE。
我建议你检查一下你的情况。 如果没有,那么:
如果是,删除对象变量并通过FragmentManager添加片段,请参阅:http://www.survivingwithandroid.com/2013/04/android-fragment-transaction.html
希望这有帮助