FragmentStatePagerAdapter中的getItem从Fragment实例化时从未调用过

时间:2016-08-18 21:52:24

标签: android fragment fragmentpageradapter fragmentstatepageradapter

我在我的活动中使用片段会有一张“swiper”图片。我创建了一个FragmentStatePagerAdapter,我试图从这个Fragment中调用它,由于某些原因,我的getItem()方法永远不会被调用。

我已经搜索过并发现我需要在实例化FragmentStatePagerAdapter时使用getChildFragmentManager(),因为我是从Fragment调用它的。我试过这个以及getSupportFragmentManager(),但没有运气。

有什么想法吗?

这是我的片段,我在我的MainActivity上使用shoudl设置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) {

        }
    });
}

}

这是我的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向我显示NUM_PAGES为&gt; 0所以这不是我的问题。我在构造函数和getCount()中看到了我的日志,但getItem()中没有。

TIA

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。我将我的片段隐藏在我的FragizeManager中后立即将其隐藏在我的InitializeActivity()中,因此它从未使用ViewPager等完全构建片段。

我将不得不想出一个隐藏/显示片段的不同解决方案,但那是我的问题。