我有对象列表Offer,并使用它们的数据尝试填充片段(每个片段一个对象)。它以显示它们的方式工作,但是显示的第一个实际上是第二个,在我向左滑动两次并回到第一个之后,它在那里(第一个)
我知道这个问题与此有关
所显示的ViewPager第一个片段始终与FragmentStatePager错误
但是问题是自我回答的,不是很容易理解,所以我真的需要帮助
这是我的代码:Fragment内部活动
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));
}
}
}
我的ImageFragment类是单独的,看起来像这样
public class ImageFragment extends Fragment {
//some inits again
public static ImageFragment init(Offer offer) {
// Supply val input as an argument.
name = offer.getName();
description = offer.getDescription();
moreInfoURL = offer.getMoreInfoURL();
return new ImageFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
layoutView = inflater.inflate(R.layout.fragment_image, container,
false);
tv = layoutView.findViewById(R.id.text);
((TextView) tv).setText(name + "\n"+ description);
iview = layoutView.findViewById(R.id.image);
//...some inits
((ImageView) iview).setImageBitmap(pic);
return layoutView ;
}
}
我已经解决了这个问题。它被破坏的原因是由于某种原因(我不知道),您无法在它的init或factory方法中初始化Fragment(例如,您的ImageFRagment)所需的值,并期望稍后在创建视图以保留时使用它订单到位。您必须通过arguments(bundle)将值作为片段的参数提供。因此,如果启动分页器时适配器有4个页面,其内容分别为A,B,C,D,则将为element [0]即调用onCreateView和onCreate。答:就我而言,我总是得到B,B,C,D,然后向后滑动D,C,B,A。
因此,要修复您的代码,请执行以下操作:公共静态ImageFragment init(提供){
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; }
然后必须在onCreate()上使用以下参数初始化视图所需的值:
mName = getArguments().getInt(ARG_NAME);
content = getArguments().getString(ARG_CONTENT);
在您的onCreateView()中,您可以使用辅助函数来访问这些值以检索它们。
((TextView) rootView.findViewById(android.R.id.text1)).setText(getContent()); ((TextView) rootView.findViewById(R.id.article_content)).setText(getPageNumber());
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句