Android ViewPager-刷卡时刷新片段视图

Android ViewPager-刷卡时刷新片段视图,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,您好,我想在滑动时更新viewpager片段的视图(类似于setOffscreenPageLimit=0,它不起作用,因为最小偏移量为1),但我不知道如何更新。我尝试使用interface,但在我尝试设置可见性的视图部分出现nullpointer异常: pager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int positio

您好,我想在滑动时更新viewpager片段的视图(类似于setOffscreenPageLimit=0,它不起作用,因为最小偏移量为1),但我不知道如何更新。我尝试使用interface,但在我尝试设置可见性的视图部分出现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);
    }
}
碎片状态页雷达:

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;
    }
}

我能做些什么来解决这个问题呢?

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

因为您返回一个未初始化的片段,然后立即调用它的
OnRefresh
方法,该方法试图操作尚未创建的视图,所以会得到一个NPE


在调用
OnCreateView
之前,不要尝试访问片段中的视图。

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

OnPageChangeListener pagechangelistener=新建OnPageChangeListener(){

在页面适配器中使用此选项

@凌驾 public int getItemPosition(对象){


空指针表示您试图使用未初始化的对象。为避免此问题,请确保您使用的对象不为空。是的,我知道,但我猜在刷卡时不会调用初始化布局部分的onCreateView。无法判断问题所在,因为您未指定引发异常的位置。异常I在onRefresh中抛出了。那么,在OnCreateView之后调用onRefresh该怎么办呢?您的意思是什么?只需在创建视图之后而不是之前调用该方法。您不能使用不存在的视图。我如何调用此((OnRefreshListener)适配器。getItem(position)).onRefresh();创建视图后?您不能。如上所述,getItem返回一个片段,其视图尚未创建,因此您无法操作视图,因为它们不存在。如果您希望视图在首次创建时具有特定的可见性,只需将视图设置为正确的默认可见性。请仔细考虑。视图的可见性将l始终是相同的,因为它是一个全新的片段。没有代码可以运行来更改任何视图的可见性。只需在布局文件或onCreateView方法中将可见性设置为所需的任何值。
        @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);
    return POSITION_NONE;
}