首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FragmentStatePagerAdapter未刷新

FragmentStatePagerAdapter未刷新
EN

Stack Overflow用户
提问于 2015-04-14 07:09:51
回答 2查看 1.3K关注 0票数 0

我有一个片段,其中包括几个使用FragmentStatePagerAdapter作为适配器的寻呼机。当第一次创建片段时,它工作得很好。但是,当我第二次创建片段时(例如,当我切换选项卡时),FragmentStatePagerAdapter根本没有更新。这是我的代码:

代码语言:javascript
复制
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()。

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

代码语言:javascript
复制
@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);
}
EN

回答 2

Stack Overflow用户

发布于 2015-04-14 07:58:43

将此代码添加到您的FragmentStatePagerAdapter中:

代码语言:javascript
复制
@Override 
public int getItemPosition(Object object){
     return POSITION_NONE; 
} 

尝试这个,这将重新创建片段。

票数 0
EN

Stack Overflow用户

发布于 2020-04-02 06:23:56

在使用没有方法ViewPager2getItemPosition时,我也遇到了同样的问题。

解决方案是在getItemId中重写FragmentStateAdapter中的方法

代码语言:javascript
复制
override fun getItemId(position: Int): Long {
    return data[position]?.id ?: 0
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29621227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档