77

次の例を使用して、viewPager を実装しています: http://code.google.com/p/viewpagerexample/issues/list

この例の問題は、開始位置を設定する方法がわからないことです。デフォルトの開始位置は 0 です。基本的に、使用可能なビューが左または右にあるかどうかを制御したくありません。

センターのビューの現在位置を制御する方法はありますか? それを行うより良い方法はありますか?円形にすることは可能ですか?

4

9 に答える 9

174

私はそれの位置を設定する方法を見つけました、それはクラスの外で行われます:

 awesomePager = (ViewPager) findViewById(R.id.awesomepager);
 awesomePager.setAdapter(awesomeAdapter);
 awesomePager.setCurrentItem(CurrentPosition);

それに合わせたいアイテムの量を計算することで制限できます

于 2012-08-09T10:00:17.893 に答える
17

最後のフラグメントから始めるには、次のようにしました。

PagerAdapter pagerAdapter = new PagerAdapter();
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(pagerAdapter.getCount() - 1);
于 2015-03-11T14:33:07.017 に答える
10

アダプターを設定する前に現在のアイテムを設定すると、最初に返されるアイテムが常に位置 0 になるという問題に遭遇しました。

次のことを確認してください。

awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);

ではない:

awesomePager.setCurrentItem(CurrentPosition);
awesomePager.setAdapter(awesomeAdapter);
于 2013-11-25T22:19:41.287 に答える
6

サイズが1000を超える配列があり、動的ビューページャーでは、最初のロードで左スワイプがスタックしていました。以下のコードはこれを解決し、スムーズなスクロールを実現しました:

@Override
onResume(){
   super.onResume();
   viewPager.setCurrentItem(newPosition);
}
于 2015-11-03T07:09:25.200 に答える
2

私は同じ問題に遭遇しました。ViewPager を初期化すると、インジケーターの位置が 0 でした。これは、Pager コンテンツの計算量に依存する場合があります。以下のように ViewTreeObserver を使用します。

mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        mViewPager.setCurrentItem(newPosition);
        removeOnGlobalLayoutListener(mSlidingTabLayout.getViewTreeObserver(), mGlobalLayoutListener);
    }
};
mSlidingLayout.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);

と、

private void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener) {
       if (observer == null) return;
       if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
               observer.removeGlobalOnLayoutListener(listener);
       } else {
               observer.removeOnGlobalLayoutListener(listener);
       }
} 

このように、ディレイの時間設定も煩わしくありません。

于 2015-11-11T10:05:09.827 に答える