显示错误片段的片段状态寻呼机适配器

时间:2015-11-24 19:49:17

标签: android android-fragments android-viewpager

我有一个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个项目,您必须根据需要创建碎片。如果是的话,你能给我建议如何处理这个问题。

由于

2 个答案:

答案 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()来获取当前显示项目的位置来解决问题。