我想使用viewpager显示来自一堆对象的信息。
我有一个包含4个片段的viewpager,我希望每次将viewpager滑动到另一个片段时,不可见的片段会从堆栈中弹出/查看对象。

我已经尝试了一些东西。我试图使用OnPageChangeListener()监听页面更改,并找到某种方法从活动内部更新片段内容。我没有做到这一点。

这是我的适配器:

public class PagerAdapter_Browse extends FragmentPagerAdapter {

FragmentManager mManager;

public PagerAdapter_Browse(FragmentManager fm) {
    super(fm);
    mManager = fm;
}

@Override
public Fragment getItem(int arg0) {
    switch (arg0) {
        case 0:
            return new FragmentBrowseOne();
        case 1:
            return new FragmentBrowseTwo();
        case 2:
            return new FragmentBrowseThree();
        case 3:
            return new FragmentBrowseFour();
        default:
            break;
    }
    return null;
}


@Override
public int getCount() {
    return 4;
}
}


我的片段之一(看起来都差不多):

public class FragmentBrowseOne extends Fragment {


ImageView main_img;
View view;

public FragmentBrowseOne(){
    setArguments(new Bundle());
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    Bundle bundle = getArguments();

    BitmapDrawable profilePic;

    view = inflater.inflate(R.layout.fragment_browse_one, container, false);

    main_img = (ImageView) view.findViewById(R.id.main_img);

    Bitmap temp = bundle.getParcelable("object");
    profilePic = new BitmapDrawable(getResources(), temp);
    main_img.setBackground(profilePic);

    main_img.setScaleType(ImageView.ScaleType.CENTER_CROP);

    return view;
}
}


这是我的活动的一部分:

    viewpager = (ViewPager) findViewById(R.id.pager_browser);
    padapter = new PagerAdapter_Browse(getSupportFragmentManager());

    PagerAdapter wrappedAdapter = new InfinitePagerAdapter(padapter);
    viewpager.setAdapter(wrappedAdapter);

    viewpager.setId(R.id.pager);

    viewpager.setOffscreenPageLimit(1);

    viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        public void onPageScrollStateChanged(int state) {

        }

        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        public void onPageSelected(int position) {
            FragmentBrowseOne fragment = new FragmentBrowseOne();

            Bitmap pic = BitmapFactory.decodeResource(getResources(), R.mipmap.samplegirl4);
            fragment.getArguments().putParcelable("object", pic);
        }
    });

最佳答案

使用SetArguments并将其成束地传递给每个片段。参数必须包含在其中进行了所需更改的新对象。
使用构造函数

public FragmentNumber(){
        setArguments(new Bundle());
}


使用以下方法返回片段

FragmentNumber fragment = new FragmentNumber();
  fragment.getArguments().putSerializable("object", newobject);


每当页面更改时,这将刷新片段中的数据。

10-07 16:05
查看更多