1

これは、アクティビティからネストされたフラグメントへの結果を取得する有名な問題で、アクティビティは直接アクティビティにアタッチされているネストされていないフラグメント1。そのため、ネストされたフラグメントのonActivityResultが何に関係なく呼び出されることはありませんでした。 私の場合、フラグメントの束を持つviewPagerを持つ1つのフラグメントを含むアクティビティが1つあります。 viewPagerのこのフラグメントの1つで、カメラインテントを開始しようとしましたが、このインテントによって返された結果は最後のフラグメントに送られませんでしたが、私は見つけたseverals答えを試みましたが、イベントバスオブジェクトを作成して、activityからresultCodeをすべてのフラグメントに拡散しますが、このケースでは機能しません。onActivityResultを作成する方法ビューページからネストされたフラグメントに対して呼び出される

答えて

0

私は非常に似たような状況にあったので、私はあなたのための解決策があるかもしれません。

短く言えば、は、Fragmentを依存しなくなり、自分自身で動作ロジックを実装しました。

あなたが信用すべきonActivityResult()Activityの1つだけです。

あなたはこの1

public interface ActivityResultDispatcher { 
    // Pass anything you want, Bundle, Intent, ecc... 
    // For the sake of simplicity I'm using Bundle... 
    public void dispatchResultData(final Bundle data); 
} 

ようinterfaceを作成し、Fragmentクラスがそれを実装する必要があります。

あなたActivityとあなたのFragmentあなたは(あなたのActivityに)このような何かを行うことができますことを非常に簡単であるべきとの通信:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    final Bundle bundle = new Bundle(); 
    // put data inside Bundle 
    this.primaryFrament.dispatchResultData(bundle); 
} 

、プライマリFragmentが成り立つものです他のFramentクラスを持つViewPager。あなたが行いますプライマリFragmentでそう

@Override public void dispatchResultData(final Bundle data) { 

    for (int i = 0; i < MyViewPager.NUM_FRAGMENTS; i++) { 
     final ActivityResultDispatcher subFragment = (ActivityResultDispatcher) this.retrieveFragment(i); 

     // some fragments in ViewPager may be dynamically deleted 
     if (subFragment != null) { 
      subFragment.dispatchResultData(data); 
     } 
    } 
} 

機能retrieveFragment(final int position)は、私は、ウェブ上で見つけたコードの非常に居心地の良い作品です。

このようなViewPager作品のための実装:

public Fragment retrieveFragment(final int position) { 
    return this.fragmentManager.findFragmentByTag("android:switcher:" + R.id.my_pager_id + ":" + position); 
} 

ViewPagerのすべてのアクティブなFragmentクラスがBundleを受け取ることになりますし、あなたはそれをどうするかを決めることができます。

あなたは、このような

public void dispatchResultData(final Bundle data, final int requestCode); 

として、ディスパッチャに多くの情報を渡し、それが関数呼び出しに答える必要がある場合は、あなたのFragment決める必要があります。

基本的には完全に動作する完全なonActivityResult()ユーティリティを構築しており、Fragments(インスタンス化されている場合)のすべてが結果を受け取ることが保証されています。

関連する問題