getActivity()在片段上返回null?

时间:2016-12-20 09:17:31

标签: android nullpointerexception fragment

我有MainActivity()FirstFragment()

我正在调用来自MainActivity()的FirstFragment中的函数。

问题是,时间getActivity()是否返回null?

6 个答案:

答案 0 :(得分:2)

片段开始时执行此操作

public void onViewCreated(View view, Bundle savedInstanceState) {
    mcontext=getContext();

如果需要,可以轻松地将mcontext作为活动投放。

自Android API级别23以来,onAttach(活动活动)已被弃用。您需要使用onAttach(Context context)。 http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity) 所以如果你想使用onattach你需要做

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    Activity a;
    if (context instanceof Activity){
         a=(Activity) context;
    }
} 

不要

  if(getActivity()==null){
将应用程序移动到后台并返回时,

get活动将返回null。 如果你使用它,它会忽略代码的这一部分,有时会产生你不知道它们来自哪里的错误。

答案 1 :(得分:1)

请使用Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='DevExpress.Xpf.Editors.TextEdit', AncestorLevel='1''. BindingExpression:(no path); DataItem=null; target element is 'Popup' (Name=''); target property is 'PlacementTarget' (type 'UIElement') 的{​​{1}}引用。我认为这是使用Fragment

中的Activity实例的最佳实践
onAttach()

答案 2 :(得分:1)

// declare a variable activity in your fragment
private Activity activity;

@Override
public void onAttach(Context context) {
    super.onAttach(context);

    if (context instanceof Activity) {
        this.activity = (Activity) context;
    }

}

@Override
public void onDetach() {
    super.onDetach();
    this.activity = null;
}


private void initToolbar() {

    // then use the var in any function
    if (activity == null) {
        return;
    }

}

答案 3 :(得分:0)

我认为你应该通过context尝试这样

if(isNetworkAvailable(getActivity().getContext())) 
{
    System.out.println("Internet is On.");
} 

答案 4 :(得分:0)

而不是使用Activity引用。您可以创建Context类的引用。

private Context context;

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof Activity) {//Name of your activity
        this.context = (Activity) context;
    }
}

答案 5 :(得分:0)

private Context mContext;

@Override
public void onAttach(Context context) {
    super.onAttach(context);
mContext = context;
}

然后在你想要调用功能的地方' MainActivity'像这样:

((MainActivity)mContext).theFunctionYouWanToCall();

或者如果片段可能属于多个活动,请先检查:

if(MainActivity instanceOf mContext)
  ((MainActivity)mContext).theFunctionYouWanToCall();

希望这有帮助!