1

無限スクロールで限定的なFragment+を作成する方法はありますか?ViewPager

例えば ​​:

10 を作成しますFragment。5 番目にスクロールするとFragment、インデックス番号 0 のフラグメントが破壊され、11 番目に表示されますFragment

**1** 2 3 4 5 6 7 8 9 10

5番目にスクロールした後

2 3 4 **5** 6 7 8 9 10 11

変数

private static final int NUM_PAGES = 10;

これが私のFragment adapter

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

    @Override
    public Fragment getItem(int position) {
        return PageFragment.create(position);
    }

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

}

Fragment番号 1 から始まる表示の内容を次に示します。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    ViewGroup rootView = (ViewGroup) inflater.inflate(
            R.layout.fragment_view, container, false);

    ((TextView) rootView.findViewById(R.id.tvUsername)).setText(
            ""+ (mPageNumber + 1));
    return rootView;
}

選択したイベントが発生したとき

mPager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int pageSelected) {
        // TODO Auto-generated method stub
        Log.d(TAG, "selected = " + pageSelected);
        if (pageSelected > (NUM_PAGES - 6)) {
                   //Event do it here?
        }
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }
});

質問: イベントの作成方法を教えてください。

positionの値を変更することでできると思いますgetItem()。しかし、私はそれを行う方法がわかりません

4

1 に答える 1

0

私が思いついた唯一の方法は、3 ページだけを作成し、ユーザーが最後のページにスクロールすると、すべてのフラグメントを置き換えることです。このようなもの:

配列

ArrayList<Integer> positions = new ArrayList<Integer>();

public void initPositions() {
    positions.add(0);
    positions.add(1);
    positions.add(2);
}

アダプター

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

@Override
public Fragment getItem(int position) {
    return PageFragment.create(positions.get(position));
}

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

}

リスナー

mPager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int pageSelected) {
        //scrolled to first page
        if(pageSelected == 0) {
                    //Make sure its not unlimited upwards
                    if(positions.get(pageSelected == 0))
                        return;
                    //remove last and insert new at bottom
            positions.remove(2);
            positions.insert(0, positions.get(0) - 1);
        //scrolled to last page
        } else if(pageSelected == 2) {
                    //remove first and add one last
            positions.remove(0);
            positions.add((positions.get(1) + 1) % NUM_PAGES);
        }
            //make sure the adapter understands
            mAdapter.notifyDataSetChanged();
            //move pager to the middle again
            mPager.setCurrentItem(1);
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }
    });

これがパフォーマンス的にどのように機能するか、またはまったく機能するかどうかはわかりませんが、試してみてください:)

于 2013-03-03T08:12:54.063 に答える