【问题标题】:Fragment State Pager Adapter Showing Wrong Fragment片段状态寻呼机适配器显示错误片段
【发布时间】:2015-11-24 19:49:17
【问题描述】:

我有一个 FragmentStatePagerAdapter,它在下一个 Fragment 中显示当前 Fragment 的详细信息。这是页面适配器

    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 个项目,您必须在其中按需创建片段。如果是的话,你能给我建议如何处理这个问题。

谢谢

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案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);
            }
    
        }
    

    我顺利地解决了问题。

    【讨论】:

      【解决方案2】:

      我通过调用 pager.getCurrentItem() 来获取当前显示项目的位置解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多