0

こんにちは、スワイプで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;
    }
}

その問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

アダプターで getItem を呼び出していますが、これは (私が推測するに) 新しいフラグメントを返しています。

初期化されていないフラグメントを返し、OnRefresh作成されていないビューを操作しようとしているメソッドをすぐに呼び出すため、NPE が発生します。

OnCreateViewAFTERが呼び出されるまで、フラグメント内のビューにアクセスしようとしないでください。

于 2013-10-12T13:02:14.657 に答える