FragmentでOnActvityResultが得られない戻り値の問題

1931 ワード

我々はFragmentでstartActivity ForResult()メソッドを使用してActivityを開き、Activity破棄を取得する必要がある場合にonActivity Result()を介して開くFragmentにデータを渡す.一般的には問題ありませんが、このFragmentが添付されている構造がActivity+ViewPager+Fragmentであれば、では、このFragmentのonActivity Result()メソッドではデータが取得できません(その添付された下位層のActivityに受け入れられました)、このFragment ActivityのonActivity Result()でこのFragmentのオブジェクトを取得し(tagを介して)、このfragmentのonActivity Result()を呼び出すだけでこのfragmentに値を渡すことができます:ActivityのOnActivity Result()で
  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(mineFragment.getTag());
        fragmentByTag.onActivityResult(requestCode, resultCode, data);
    }

データを取得するには、FragmentのOnActivity Result()メソッドを使用します.
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);   
           //      
}

次の方法ではこのFragmentを初期化で作成する必要があります.空のポインタが異常に見つかりません.
 findFragmentByTag(mineFragment.getTag())

私たちはViewPagerを書くときに初期化時にこのように書くことに慣れました.
fragments = new ArrayList<>();
        fragments.add(0, new HomeFragment());
        fragments.add(1, new ShoppingCartFragment());
        fragments.add(2, new ShoppingCartFragment);
        fragments.add(3, new MineFragment());

        supportFragmentManager = getSupportFragmentManager();
        mainPagerAdapter = new MainPagerAdapter(supportFragmentManager, fragments);

このようにOnActvityResult()メソッドでは、MineFragmentが初期化されていないため、メソッドを使用するのは問題があります.
supportFragmentManager.findFragmentByTag(MineFragment.class.getSimpleName());

正しい書き方は次のとおりです.
     mineFragment = new MineFragment()
    fragments.add(3, mineFragment );