0

FragmentPagerAdapterとViewPagerを使用してカルーセルビューに取り組んでいます。ページをスクロールするたびに画像名を変更すると、2番目の画像に対してのみ間違った名前が表示されるという問題に直面しています。この場合、最初の画像の名前が表示され、3 番目の画像以降は再び位置が 0 から 1 に増加します。onPageScrolled で位置を確認しましたが、1 番目と 2 番目の画像の両方で 0 が表示されています。また、2番目の画像が表示されたときにのみ getItem メソッドに呼び出しが来ないことを私が観察したもう1つのこと。この問題を解決するアイデアがあれば教えてください。

4

1 に答える 1

1

ViewPager は、スムーズなスワイプを実現するために、現在のフラグメントを囲むフラグメントをインスタンス化します。を使用しsetOffScreenPageLimit(int)て、現在のページの両側に保持するページ数を設定します。デフォルトは 1 です。

  1. ViewPager のアダプターを設定し、最初のページ (position=0) を表示すると、現在のページ位置がまだ 0 である間に、2 番目のページのフラグメントも作成されます (getItem())。
  2. ページ 2 にスワイプすると、現在のページ位置が 1 のときに 3 番目のフラグメントが作成されます (現在、現在のページの両側に 1 つの既存のフラグメント インスタンスがあります)。
  3. ページ 3 にスワイプすると、現在のページ位置を示す 4 番目のフラグメントが作成され、現在は 2 です (ページ 1 フラグメントは破棄されます)。
  4. 等々...

異なるフラグメントの実際の位置を取得したい場合は、 から直接取得しFragmentPagerAdapter.getItem(int position)、位置をフラグメントの引数として設定してから返します。

public Fragment getItem(int position) {
    YourFragment fragment = new YourFragment();
    Bundle args = new Bundle();
    args.putInt("page_position", position);
    fragment.setArguments(args);
    return fragment;
}

次に、次のように YourFragment の位置を取得できます。

int position = getArguments().getInt("page_position"));
于 2014-07-08T06:51:40.287 に答える