【问题标题】:FragmentPagerAdapter.getItem (int) shows wrong FragmentFragmentPagerAdapter.getItem(int) 显示错误的 Fragment
【发布时间】:2014-06-03 14:48:02
【问题描述】:

我的 FragmentPagerAdapter 携带 ViewPager.OffScreenPageLimit 的 3 个页面,始终显示最后加载的页面

我使用 ViewPager 来显示片段。

我的 ViewPager

private static final int MONTH_SIZE = 12;

            viewPager.setAdapter(new CalendarFragmentPagerAdapter(getChildFragmentManager()));
        viewPager.setCurrentItem(GregorianCalendar.getInstance().get(Calendar.MONTH));
        viewPager.setClickable(true);
        viewPager.setSaveEnabled(false);
        viewPager.setOffscreenPageLimit(1);

我的 FragmentPageAdapter:

    public class CalendarFragmentPagerAdapter extends FragmentPagerAdapter {

    /**
     * @param fm
     */
    public CalendarFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    /**
     */
    @Override
    public Fragment getItem(int pageRequest) {
        return new CalendarFragment(pageRequest);
    }

    /**
     */
    @Override
    public int getCount() {
        return MONTH_SIZE - 1;
    }

    /**
     */
    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {

        case 0:
            return getString(R.string.monthJanuary);

        case 1:
            return getString(R.string.monthFebruary);

        case 2:
            return getString(R.string.monthMarch);

        case 3:
            return getString(R.string.monthApril);

        case 4:
            return getString(R.string.monthMay);

        case 5:
            return getString(R.string.monthJune);

        case 6:
            return getString(R.string.monthJuly);

        case 7:
            return getString(R.string.monthAugust);

        case 8:
            return getString(R.string.monthSeptember);

        case 9:
            return getString(R.string.monthOctober);

        case 10:
            return getString(R.string.monthNovember);

        case 11:
            return getString(R.string.monthDecember);

        default:
            return "";
        }
    }

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

我的片段:

// Nothing especial
    List<CalendarEntry> events = getEvents(indexByCalendarFragmentPagerAdapter);

        listView = (ListView) view.findViewById(R.id.listView_calendar_screen);

        listView.setAdapter(new CalendarCustomAdapter(getActivity().getBaseContext(), events));

        listView.setClickable(true);

错误是例如显示在五月,二月的事件

已经尝试了好几种方法都不能解决问题,有人可以帮帮我吗?

【问题讨论】:

  • 因为你设置了计数 @Override public int getCount() { return MONTH_SIZE - 1; } 删除 -1
  • 什么是 MONTH_SIZE 变量?
  • MONTH_SIZE 是个常数,一年中的月数,我忘了放她
  • 更改为 MONTH_SIZE 后不断跳过几页。例如,显示 5 月份、2 月份的事件

标签: android android-viewpager fragment fragmentpageradapter


【解决方案1】:

只需将此代码或名为 getCount() 的函数更改为:

@Override
public int getCount() {
    return events.length;
}

【讨论】:

  • 把 events.length 放在 getCount() 会改变 ViewPager 的大小为当月的事件数
【解决方案2】:

我用自己的 PagerAdapter 解决了。 我使用了blog Eilfa上的示例代码

【讨论】:

    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2022-09-27
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多