我想使用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);
}
});
答案 0 :(得分:1)
使用SetArguments并将其传递给每个片段的bundle。参数必须包含进行所需更改的新对象。 使用构造函数
public FragmentNumber(){
setArguments(new Bundle());
}
使用以下方法
返回片段FragmentNumber fragment = new FragmentNumber();
fragment.getArguments().putSerializable("object", newobject);
每当页面改变时,这将刷新片段内的数据。