2017-03-29 4 views
-1

ターゲットフラグメントからonActivityResult()を呼び出そうとしています。下記のコードでNPEを取得する。ターゲットフラグメント内でハードウェアが押されたときのsourcefragmentのonactivity結果の呼び出し

いくつかご提案ください。

// target fragment 
public void backButtonWasPressed() { 
    Intent intent = new Intent(); 
    // NPE occurs in the below line 
    getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent); 
    getActivity().getSupportFragmentManager().popBackStack(); 
} 

// main activity 
@Override 
public void onBackPressed() {  
    if (sourceFragment != null) { 
      TargetFragment fragment = new TargetFragment(); 
      fragment.backButtonWasPressed(); 
    } else { 
      super.onBackPressed(); 
      return; 
    }   
} 
+1

を呼び出し、次に、引数として、すなわち、

public static void backButtonWasPressed(Fragment frag) 

のフラグメントを通過させるようにしてもよいですか?オブジェクトを作成せずにこのメソッドを呼び出すと、getTargetFragment()はどのように動作しますか。 – Rahul

+0

メソッドbackButtonWasPressed()が非staticになっている場合、このメソッドをmainアクティビティから呼び出すためにフラグメントクラスをinstatntiateする必要があります。そして、私がそれをすると、私は呼び出しメソッド内にNPEを取得しています。 – Durga

+0

私はそれを働かせました。コードを変更してツールバーに戻るボタン(画像ビュー)を表示し、ハードウェアの戻るボタンを押したときにbackbutton.performclick()がトリガーされました。 buttonOnClickListener()を追加し、コードをbuttonclicklistenerブロック 'Intent intent = new Intent();に追加しました。 onActivityResult(getTargetRequestCode()、Activity.RESULT_OK、intent); getTargetFragment()。 getActivity()。getSupportFragmentManager()。popBackStack(); ' – Durga

答えて

0

getTargetFragment()Fragmentの非静的メソッドです。 hereを参照してください。あなたが戻ってきたフラグメントのインスタンス化への参照を取得する必要があります。最も簡単な方法は、この方法は、静的である理由

frag.getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent); 
+0

このエラーが発生します。 java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'void android.support.v4.app.Fragment.onActivityResult(int、int、android.content.Intent)'を呼び出そうとしました – Durga

+0

'getTargetFragment()'がおそらく戻っていますヌル。これは、関連するものの、異なる問題です。 [NullPointerExceptionとは何ですか?どうすれば修正できますか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it)を参照してください。 – Cheticamp

+0

私はそれを働かせました。コードを変更してツールバーに戻るボタン(画像ビュー)を表示し、ハードウェアの戻るボタンを押したときにbackbutton.performclick()がトリガーされました。 buttonOnClickListener()を追加し、コードをbuttonclicklistenerブロック 'Intent intent = new Intent();に追加しました。 getTargetFragment()。onActivityResult(getTargetRequestCode()、Activity.RESULT_OK、インテント); getActivity()。getSupportFragmentManager()。popBackStack(); ' – Durga

関連する問題