我想使用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);
每当页面更改时,这将刷新片段中的数据。