我有一个片段,其中包含几个使用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() .
Edit: 将使用此适配器的片段的代码 .
@Override public View onCreateView(LayoutInflater inflater,ViewGroup container,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);
}
1 回答
将此代码添加到FragmentStatePagerAdapter:
尝试这将重新创建片段 .