4

私は Android プログラミングの初心者で、これがこのサイトでの最初の質問です。この問題の検索に多くの時間を費やしましたが、私のケースに合った答えが見つかりませんでした.

ViewPager には 2 つのページがあり、1 つは現在のページ用、もう 1 つは次のページ用です。2 番目のフラグメントが表示されたら、そのインデックスを 0 に設定し、最初のフラグメントを削除して、2 番目の代わりに新しいフラグメントを作成します。これが私のコードです。

mPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int pageSelected) {
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (position  == 1) {
                currentQuestFr = nextQuestFr;
                nextQuestFr = newQuest();
                mPager.setCurrentItem(0, false);
                mPagerAdapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

そしてアダプター

private class QuestPagerAdapter extends FragmentStatePagerAdapter {

    public QuestPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) return currentQuestFr;
        else return nextQuestFr;
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }

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

コードはうまく機能しますが、それnotifyDataSetChanged()を必要とせずにビューを更新するようです。ユーザーを少し悩ませます。ビューを再描画せずにアダプターを更新する方法、または同じ目的を達成する他の方法はありますか? どうもありがとう

4

1 に答える 1

0

最初にすべてのデータをロードしてから、何らかのイベントでビューを手動で再描画するように動作させたいですか? 次に、 mPager.setOffscreenPageLimit(n)を使用できます 。ここで、n は mPager のページ数です。これにより、ロード時にすべてのページが描画されます。

于 2013-05-03T04:41:17.537 に答える