Viewpager - setCurrentItem(1),当子片段调用startActivityForResult时,片段父片段没有onActivityResult()

时间:2015-02-13 21:51:53

标签: android android-fragments android-viewpager start-activity android-nested-fragment

所以我有一个嵌套的Fragment和view pager场景。我有一个加载ParentFragment的活动。 ParentFragment有一个包含4个片段的ViewPager。通常情况下,视图寻呼机从0开始。但是因为我想帮助用户返回到之前的位置,我想看看如果我使用setCurrentItem(1)会发生什么。

当我调用setCurrentItem(1)时,viewpager会转到第二个选项卡,但是,如果用户从MyFrag2触发onClickListener到startActivityForResult,则不会调用ParentFragment上的onActivityResult。但是,如果我使用setCurrentItem(0)或者没有调用它,那么视图寻呼机每次都在第一个位置开始,那么ParentFragment会获得onActivityResult()调用,然后将其传递给底层片段。 / p>

我认为最初缓存了ParentFragment或缓存了ViewPager中的Fragments,但我找不到支持它的信息。有什么帮助吗?

这是MainActivity

public class MainActivity extends FragmentActivity {
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

以下是父片段

public class ParentFragment extends Fragment {
    ViewPager viewPager;
    ArrayList<Fragment> listOfFrags = new ArrayList<Fragment>();

    // other code here

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initViewPager()
    }

    public void initViewPager() {
        Fragment frag1 = MyFrag1.newInstance();
        Fragment frag2 = MyFrag2.newInstance();
        Fragment frag3 = MyFrag3.newInstance();
        Fragment frag4 = MyFrag4.newInstance();
        listOfFrags.add(frag1);
        listOfFrags.add(frag2);
        listOfFrags.add(frag3);
        listOfFrags.add(frag4);

        PagerAdapter pagerAdapter = MyPagerAdapter(getChildFragmentManager(), listOfFrags);
        viewPager.setAdapter(pagerAdapter);

        // proving a point here that setting something other than 0 causes weird behaviour
        viewPager.setCurrentItem(1);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        for (Fragment frag : listOfFrags) {
            frag.onActivityResult(requestCode, resultCode, data);
        }
    }
}

这是MyFrag2

public class MyFrag2 extends Fragment {

    public onClickListener getButtonClickListener() {
        return new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(getContext(), OtherAcivity.class);
                    startActivityForResult(intent);
                }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // do stuff
    }
}

0 个答案:

没有答案