2016-12-20 12 views
-2

私はMainActivity()FirstFragment()です。getActivity()はフラグメントでnullを返しますか?

FirstFragmentにある関数をMainActivity()から呼び出しています。

問題は、その時ですgetActivity()はnullを返しますか?

+7

あなたのコードを表示してください。 –

+0

いくつかのコードを入力してください – Chandrahasan

+0

あなたはどのようにフラグメントをアクティビティにロードしていますか? – Raghavendra

答えて

1

Activityの参照をonAttach()からご利用ください。私は、フラグメントが

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

mcontextを起動したときにこれを行ってください、私はあなたがcontextこの

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

Activityのインスタンスを使用するための最良のpraticeだと思います必要に応じて簡単に活動としてキャストされます。

Android APIレベル23以降、onAttach(アクティビティアクティビティ)は廃止されました。 onAttach(コンテキストコンテキスト)を使用する必要があります。 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

のようにしてみてください渡すべきだと思い、これは断片

から
public class FirstFragment extends Fragment { 
private Activity mActivity; 
    @Override 
     public void onAttach(Context context) { 
      super.onAttach(context); 
      mActivity = (Activity) context;//use this one .. this is MainActivity instance u can use this as MainActivity mMainActivity = (MainActivity)mActivity; 
     } 
    } 
0

アクティビティ参照を使用する代わりに。 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; 
    } 
} 
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; 
    } 

} 
0

プライベートコンテキストmContext。

@Override public void onAttach(コンテキストコンテキスト){ super.onAttach(context); mContext = context; }

......あなたは、このような 'MainActivity' 内の関数を呼び出したい場所で次に

((MainActivity)mContext).theFunctionYouWanToCall();

またはその断片が複数の活動に属することができれば、その後、最初のチェック

IF(MainActivity INSTANCEOF mContext) ((MainActivity)mContext).theFunctionYouWanToCall();

このヘルプが必要です。

関連する問題