Android ViewPager中显示的第一个片段是我创建的第二个片段
我有一个对象列表,我尝试用它们的数据填充片段(每个片段一个对象)。它的工作方式是显示它们,但显示的第一个实际上是第二个,在我向左滑动两次并返回到第一个之后,它就在那里了(第一个) 我知道这个问题和这个有关 但是这个问题是我自己回答的,不容易理解,所以我真的需要帮助 这是我的代码: 内片段活性Android ViewPager中显示的第一个片段是我创建的第二个片段,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个对象列表,我尝试用它们的数据填充片段(每个片段一个对象)。它的工作方式是显示它们,但显示的第一个实际上是第二个,在我向左滑动两次并返回到第一个之后,它就在那里了(第一个) 我知道这个问题和这个有关 但是这个问题是我自己回答的,不容易理解,所以我真的需要帮助 这是我的代码: 内片段活性 public class OffersDisplay extends FragmentActivity { /*some inicializations for layo
public class OffersDisplay extends FragmentActivity {
/*some inicializations for layout and stuff*/
listOfOffers = (ArrayList<Offer>) getIntent().getSerializableExtra("listOfOffers");
...
public static class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public int getCount() {
return ITEMS;
}
@Override
public Fragment getItem(int position) {
return ImageFragment.init(listOfOffers.get(position));
}
}
}
}我已经解决了这个问题。它被破坏的原因是,由于某种原因(我不清楚),您无法在片段的init或factory方法中初始化片段(例如,您的示例中的ImageFRagment)所需的值,并期望在稍后创建视图时使用它以保持顺序。必须通过参数(bundle)将值作为参数提供给片段。因此,当您启动寻呼机时,如果适配器有4个包含内容A、B、C、D的页面,那么将为元素[0]即A调用onCreateView和onCreate。在我的情况下,我总是得到B、B、C、D,然后刷回D、C、B、A 所以要修正你的代码 `公共静态ImageFragment初始化(提供){ 然后在onCreate()上,必须使用以下参数初始化视图所需的值:
mName = getArguments().getInt(ARG_NAME);
content = getArguments().getString(ARG_CONTENT);
在onCreateView()中,可以使用帮助器函数来检索这些值
((TextView)rootView.findviewbyd(android.R.id.text1)).setText(getContent());
((TextView)rootView.findviewbyd(R.id.article_content)).setText(getPageNumber())
任何人都有任何见解吗?我也面临着同样的问题,关于FragmentStatePagerAdapter和Viewpager。请帮助。链接问题的建议解决方案不起作用。我尝试了简单的字符串数组a、b、c、d,我得到了b、b、c、d页,并从c或d向后滑动,->c、b、a或d、c、b、a。第一个元素的oncreateView/onCreate()从来没有人打过电话
ImageFragment fragment = new ImageFragment();
Bundle args = new Bundle();
String name = offer.getName();
String description = offer.getDescription();
args.putString(ARG_NAME, name);
args.putString(ARG_CONTENT, description);
fragment.setArguments(args);
return fragment; }
mName = getArguments().getInt(ARG_NAME);
content = getArguments().getString(ARG_CONTENT);