FragmentStatePagerAdapter未刷新

时间:2015-04-14 07:09:52

标签: android android-fragments

我有一个片段,其中包含几个使用FragmentStatePagerAdapter作为适配器的寻呼机。它在第一次创建片段时工作正常。但是当我第二次创建片段时(例如当我切换制表符时),FragmentStatePagerAdapter根本没有更新。这是我的代码:

public class MyPagerAdapter extends FragmentStatePagerAdapter {

    private Activity m_activity;

    public MyPagerAdapter(Activity activity) {
        super(fm);

        m_activity = activity;
        refresh();
    }

    @Override
    public Fragment getItem(int position) {
        return this.m_fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.m_fragments.size();
    }

    private void refresh() {

        m_fragments = new ArrayList<MyData>();

        // ......
        // after getting data from internet
        notifyDataSetChanged();

   }
}

我发现第一次调用getItem。但是,尽管刷新/ getCount被成功调用并且从互联网返回的数据也是正确的,但第二次没有调用它。

在notifyDataSetChanged()之后没有调用getItem()的原因是什么?感谢

P.S。:旋转设备时没问题。将正确调用getItem()。

编辑:将使用此适配器的片段代码。

@覆盖     public View onCreateView(LayoutInflater inflater,ViewGroup容器,                              Bundle savedInstanceState){

    View rootView = inflater.inflate(R.layout.home_fragment, container, false);

    // section 1
    m_sectionPager1 = (ViewPager)rootView.findViewById(R.id.sectionPager1);

    // section 2
    m_sectionPager2 = (ViewPager)rootView.findViewById(R.id.sectionPager2);

    return rootView;
}

@Override
public void onActivityCreated (Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    // 1
    m_section1Adapter = new MyPagerAdapter(this.getActivity());
    m_sectionPagerLatest.setAdapter(m_section1Adapter);

    // 2
    m_section2Adapter = new MyPagerAdapter(this.getActivity());
    m_sectionPagerHottest.setAdapter(m_section2Adapter);
}

2 个答案:

答案 0 :(得分:0)

将此代码添加到FragmentStatePagerAdapter:

@Override 
public int getItemPosition(Object object){
     return POSITION_NONE; 
} 

尝试这将重新创建片段。

答案 1 :(得分:0)

使用没有方法ViewPager2的{​​{1}}时,我遇到了同样的问题

解决方案是覆盖getItemPosition中的方法getItemId

FragmentStateAdapter