我有一个FragmentStatePagerAdapter,它显示下一个片段中当前片段的详细信息。这是页面适配器
public class CustomerPagerAdapter extends FragmentStatePagerAdapter
{
public SectionsPagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position) {
Gson gson = new Gson();
Customer selectedCustomer = mCustomers.get(position);
String serializedCustomer = gson.toJson(selectedCustomer);
return CustomerDetailsFragment.newInstance(serializedCustomer);
}
@Override
public int getCount()
{
return mCustomers.size();
}
@Override
public CharSequence getPageTitle(int position)
{
Customer selectedCustomer = mCustomers.get(position);
String CustomerTitle = selectedCustomer.getFirstName() + " " + selectedCustomer.getLastName();
return CustomerTitle;
}
}
这里是显示细节的片段
public static class CustomerDetailsFragment extends Fragment {
private Customer passedInCustomer;
public CustomerDetailsFragment() {
// Required empty public constructor
}
public static CustomerDetailsFragment newInstance(String serializedCustomer){
CustomerDetailsFragment fragment = new CustomerDetailsFragment();
if (serializedCustomer != null && !serializedCustomer.isEmpty()){
Bundle args = new Bundle();
args.putString("customerInfo", serializedCustomer);
fragment.setArguments(args);
}
return fragment;
}
private void getPosition(){
Bundle args = getArguments();
if (args != null && args.containsKey("customerInfo")){
String serializedCustomer = (getArguments().getString("customerInfo"));
Gson gson = new Gson();
passedInCustomer = gson.fromJson(serializedCustomer, Customer.class);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mRootView = inflater.inflate(R.layout.fragment_Customer_details, container, false);
if (passedInCustomer != null) {
showCustomerInfo();
}
return mRootView;
}
}
问题源于这样的事实:每次滑动都会调用两次getItem,并且需要显示的信息包含在List中,因此当getItem被调用两次时,列表中的第二个对象被提取并显示在屏幕中应该显示第一个对象。
是否有人在可滚动的ViewPager中处理显示第n个项目,您必须根据需要创建碎片。如果是的话,你能给我建议如何处理这个问题。
由于
答案 0 :(得分:1)
我注意到只有当我有相同的片段具有不同的值时才会出现此问题(在大多数情况下可能是这样)。因此,经过长时间寻找正确的答案,我决定在 getItem()方法中每隔一段时间返回一个片段,每个偶数时间返回另一个片段(这些片段完全相同,除了它们的名字:
@Override
public Fragment getItem(int position) {
if(position % 2 == 0){
return FragmentGalleryImage.newInstance(images.get(position), activity);
}else{
return FragmentGalleryImage2.newInstance(images.get(position), activity);
}
}
我解决了问题很顺利。
答案 1 :(得分:0)
我通过调用pager.getCurrentItem()来获取当前显示项目的位置来解决问题。