ViewPager - 刷卡时刷新片段视图

时间:2013-10-12 12:21:47

标签: android android-fragments android-viewpager

您好我想在swipe上更新viewpager片段的视图(类似于setOffscreenPageLimit = 0,因为最小偏移量为1,它不起作用)但我不知道如何。我尝试使用接口,但是我在视图的部分区域获得了nullpointer异常,我试图设置它的可见性:

pager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            ((OnRefreshListener) adapter.getItem(position)).onRefresh();
        }
        @Override
        public void onPageScrollStateChanged(int arg0) {}

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {}
    });

已实施接口:

@Override
public void onRefresh() {
    if(AddLesson.addNext) {
        addDetails.setVisibility(View.GONE);
        addLesson.setVisibility(View.GONE);
        addWithData.setVisibility(View.VISIBLE);
        addWithoutData.setVisibility(View.VISIBLE);
    }
}

FragmentStatePagerAdapter:

class TabsAdapter extends FragmentStatePagerAdapter {
    public TabsAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        AddLessonDetails addDetails = AddLessonDetails.newInstance(CONTENT[position]);
        return addDetails;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return CONTENT[position % CONTENT.length];
    }

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

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

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

你在你的适配器上调用getItem,它返回(我假设)一个全新的片段。

因为您正在返回一个未初始化的片段,然后立即调用其OnRefresh方法,该方法试图操纵尚未创建的视图,您将获得一个NPE。

在调用AF OnCreateView之前,请勿尝试访问片段中的视图。

答案 1 :(得分:0)

这将影响视图寻呼机中从一个页面到另一个页面的更改。

OnPageChangeListener pagechangelistener = new OnPageChangeListener(){

        @Override
        public void onPageSelected(int arg0) {
            Logger.logMessage("Called first");

            pageAdapter.notifyDataSetChanged();
            indicator.setCurrentItem(arg0);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

            Logger.logMessage("Called second");

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {

            Logger.logMessage("Called third");

        }
    };
    myViewPager.setOnPageChangeListener(pagechangelistener);

在页面适配器中使用它。

@覆盖     public int getItemPosition(Object object){

    return POSITION_NONE;
}