【问题标题】:Fragment with ViewPager PagerAdapter not updating the View带有 ViewPager PagerAdapter 的片段不更新视图
【发布时间】:2017-02-10 23:40:36
【问题描述】:

我已经有一个可以工作的 viewpager,但我有一个小错误。用户可以自己添加或删除页面。在这些页面中,我有一个编辑文本(实际上我有更多,但所有情况都是一样的),它是页面的名称。如果用户创建一个称为“page 1”的页面,将其删除并在其后立即创建另一个页面,称为“page 2”,片段将在第 1 页显示数据。为什么?我打电话给notifyDataSetChanged ();创建和删除页面后为什么不刷新片段?如果我离开活动并重新启动它,用户创建的“页面2”将显示“页面2”的数据。我还需要做什么才能正确刷新片段?

我使用这个库:link

我的 onCreate 方法

            viewPager = (ViewPager) findViewById(R.id.viewpager);
            viewPagerTab = (SmartTabLayout) findViewById(R.id.viewpagertab);
            pages = new FragmentPagerItems(this);
            int i = 0;
            for (Points points : Pref.getList_points()) {
                pages.add(FragmentPagerItem.of(points.getName(), FragmentConfigurationPoints.class, new Bundler().putInt("param1", i).get()));
                i++;
            }

            adapter = new FragmentPagerItemAdapter(getSupportFragmentManager(), pages){
                @Override
                public int getItemPosition(Object object) {
                    return PagerAdapter.POSITION_NONE;
                }
            };

            viewPager.setAdapter(adapter);
            viewPagerTab.setViewPager(viewPager);

我添加页面的方法

pages.add(FragmentPagerItem.of(
        Pref.getList_points().get(Pref.get_size() - 1).getName(),
        FragmentConfigurationPoints.class,
        new Bundler().putInt("param1", Pref.get_size() - 1).get()
));
adapter.notifyDataSetChanged();
viewPagerTab.setViewPager(viewPager);
viewPager.setCurrentItem(Pref.get_size() - 1, true);

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    使用新数据重置适配器应该强制加载新数据。

    viewPager.setAdapter(adapter);
    

    notifyDataSetChanged() 无法正确执行您需要的操作。 此方法刷新适配器内部的数据而不是适配器本身。 查看reference

    void notifyDataSetChanged ()
    /*Notifies the attached observers that the underlying data has been changed and any View reflecting the data set should refresh itself.*/
    

    【讨论】:

    • 如果我用adapter = new FragmentPagerItemAdapter (getSupportFragmentManager (), pages) {  @Override Public int getItemPosition (Object object) { Return PagerAdapter.POSITION_NONE;  } }; 替换adapter.notifyDataSetChanged 它根本不会改变任何东西......
    • @filol 重置适配器! viewPager.setAdapter(适配器);我不是要重新定义它
    • 哦,是的,抱歉,我已经尝试过了,但效果不好
    • @filol 我的项目中有类似的事情,listView 和 pageview 和重置适配器都可以正常工作。检查您的新数据和第一个新数据到适配器,然后重置它。祝你好运
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多