简体   繁体   中英

getItem in FragmentStatePagerAdapter never called when instantiating from a Fragment

I'm using a Fragment on my Activity that will have a picture "swiper". I've created a FragmentStatePagerAdapter which I'm trying to call from this Fragment and for some reason my getItem() method is never being called.

I've searched and found that I need to use getChildFragmentManager() when instantiating my FragmentStatePagerAdapter because I'm calling it from a Fragment. I've tried this as well as getSupportFragmentManager() with no luck from either.

Any ideas?

here's my Fragment that I'm using on my MainActivity with the method that shoudl setup the FragmentStatePagerAdapter:

public class PhotoFlipper extends Fragment {
// properties and fields
// primitive types
String currentImage;
int friendShareType = 0;
ImageView share;
ViewPager pager;
PhotoFlipperItemAdapter pagerAdapter;
LatLng itemPosition;
Activity activity;
FragmentActivity fragActivity;
public ArrayList<MarkerModel> picsAndVids;

// end properties and fields
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View photoFlipperFragmentView = inflater.inflate(R.layout.photo_flipper_layout, container, false);
    InitializeFragment(photoFlipperFragmentView);
    return photoFlipperFragmentView;
}


private void InitializeFragment(View photoFlipperFragmentView) {
    activity = getActivity();
    fragActivity = (FragmentActivity)activity;
    pager = (ViewPager)photoFlipperFragmentView.findViewById(R.id.photoflipper_pager);

    share = (ImageView)photoFlipperFragmentView.findViewById(R.id.photoflipper_share);
    share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            IPictureFlipper iPictureFlipper = (IPictureFlipper)activity;
            iPictureFlipper.ShareVideoOrImage(friendShareType, itemPosition, currentImage);
        }
    });
}
@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (hidden) {
        pager.setVisibility(View.GONE);
    }
}

public void SetTappedPicture(int index) {
    pagerAdapter = new PhotoFlipperItemAdapter(getChildFragmentManager(), picsAndVids, picsAndVids.size());
    pager.setAdapter(pagerAdapter);
    pager.setCurrentItem(index);
    pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {

        }
    });
}

}

And here's my FragmentStatePagerAdapter:

public class PhotoFlipperItemAdapter extends FragmentStatePagerAdapter {
ArrayList<MarkerModel> _markers;
int NUM_PAGES;
String TAG = "home";

public PhotoFlipperItemAdapter(FragmentManager fm, ArrayList<MarkerModel> markers, int numpages){
    super(fm);
    Log.d(TAG,"in adapter in constructor");
    _markers = markers;
    NUM_PAGES = numpages;

}

@Override
public Fragment getItem(int position) {
    Log.d(TAG,"in adapter in get item");
    Fragment fragment = PhotoFlipperItemFragment.create(position, _markers);
    return fragment;
}

@Override
public int getCount() {
    Log.d(TAG,"in adapter in get count: "+NUM_PAGES);
    return NUM_PAGES;
}

}

logcat is showing me that NUM_PAGES is > 0 so that's not my issue. I see my log in the constructor and in getCount() but nothing in getItem().

TIA

I got this sorted out. I was hiding my fragment in my InitializeActivity() right after I added it to my FragmentManager so it was never fully building the Fragment with the ViewPager etc.

I'm going to have to come up with a different solution for hiding/showing the fragment but that was my problem.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM