所以我有一个嵌套的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
}
}