ViewPager和RecyclerView外推行为

时间:2016-11-07 09:45:38

标签: android android-fragments

我有一个Selected Product : Headphones , Mouse , Keyboard(with backlight) Payment Gateway: Credit Card Fragment处理三个ViewPager。第一个包含Fragment。这是一些代码:

FragmentViewPager

RecyclerView

FragmentPagerAdapter

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_player_view_pager, container, false);

    ViewPager vpPager = (ViewPager) view.findViewById(R.id.playerViewPager);
    adapterViewPager = new PlayerPagerAdapter(getFragmentManager());
    vpPager.setAdapter(adapterViewPager);

    return view;
}

FirstFragment

// Returns the fragment to display for that page
@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0: 
            return FirstFragment.newInstance("0", "Page # 1");
        case 1: 
            return SecondFragment.newInstance("1", "Page # 2");
        case 2: 
            return ThirdFragment.newInstance("2", "Page # 3");
        default:
            return null;
    }
}

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_first, container, false); recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); adapter = new FragmentAdapter(getActivity(), myList); recyclerView.setItemAnimator(new SlideInUpAnimator(new OvershootInterpolator(1f))); recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2)); recyclerView.setAdapter(adapter); loadData(); return view; } 方法是通过loadData填充适配器的API调用。这是onPostExecute方法:

AsyncTask

问题是当我第一次实例化myList = (ArrayList<>) result; adapter.notifyDataSetChanged(); 时,即使是API调用,也会在第一个ViewPager中显示任何内容,并调用Fragment方法。但是,如果我在其他片段之间滚动并且notifyDataSetChanged()重新创建FirstFragment,则会显示数据。

你知道这里发生了什么吗?

2 个答案:

答案 0 :(得分:2)

获取FragmentAdapter的响应更新数据myList(ArrayList&lt;&gt;)后,通过您创建的任何方法,然后调用Adapter的notifyDataSetChanged()方法。

myList =(ArrayList&lt;&gt;)结果; 此初始化未反映在FragmentAdapter ArrayList

答案 1 :(得分:1)

adapterViewPager = new PlayerPagerAdapter(getChildFragmentManager()); 

您已经进入了一个片段,因此您需要获取片段管理器的片段实例。