我有一个片段,其中包括几个使用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是第一次被调用。但是它不是第二次调用,尽管成功调用了refresh/getCount,并且从internet返回的数据也是正确的。
为什么getItem()不是在notifyDataSetChanged()之后调用的呢?谢谢
P.S.:当我旋转设备的时候会很好的。将正确调用getItem()。
编辑:将使用此适配器的片段的代码。
@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);
}发布于 2015-04-14 07:58:43
将此代码添加到您的FragmentStatePagerAdapter中:
@Override
public int getItemPosition(Object object){
return POSITION_NONE;
} 尝试这个,这将重新创建片段。
发布于 2020-04-02 06:23:56
在使用没有方法ViewPager2的getItemPosition时,我也遇到了同样的问题。
解决方案是在getItemId中重写FragmentStateAdapter中的方法
override fun getItemId(position: Int): Long {
return data[position]?.id ?: 0
}https://stackoverflow.com/questions/29621227
复制相似问题