2

この行を使用して、現在のフラグメントを表示しています:

Item myFragment = (Item) getSupportFragmentManager().findFragmentById(R.id.pager);

これが私のViewPagerの例です

| A | B | C | D | E | F |

表示される最初のフラグメントはAですが、myFragmentはBです。Bに移動すると、myFragment = B ... Fに移動すると、myFragment = Eコードが表示されます:-> TabsActivity.java

誰かがすでにこの問題を抱えていますか?表示されるフラグメントとmyFragmentの値の間にシフトがあるのはなぜですか?

ありがとう

[編集]Log()を追加しましたこれが私のTabsActivityの一部です

class TabsAdapter extends FragmentStatePagerAdapter  {

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

    @Override
    public Fragment getItem(int position) {
        Log.e("POSITION", position + "");
        return Item.newInstance(CONTENT.get(position % CONTENT.size()));
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return CONTENT.get(position % CONTENT.size());
    }

    @Override
    public int getCount() {
      return CONTENT.size();
    }
}

そして、アプリケーションを起動すると、ロガーが表示されます:POSITION 0 POSITION 1

正常ですか?「POSITION0」だけを表示するのではないですか?そしてスライドすると「POSITION1」?

4

1 に答える 1

4

まず、IDに基づいてフラグメントを要求します。IDR.id.pagerは、何にでもリンクされている単なる乱数R.id.pagerです。提供されているコードでは、どのフラグメントにもIDを割り当てていないため、何かを取得しているという事実は幸運です。

Viewpagerからフラグメントを取得する場合は、次の質問で回答された基準に従う必要があります。ViewPagerの一部としてListFragmentのデータを更新する

次に、「POSITION 0 POSITION 1」が表示される理由はViewPager、現在のページに加えて、まだ持っていないすぐ近くにある他のページを取得するためです。これはgetItem()、現在のページ、前のページ、および次のページを呼び出していることを意味します。位置0には前のページはありませんが、次のページがあります。スワイプすると、次のスワイプの準備としてPOSITION 2ViewPagerを作成する必要があるため、表示されるだけです。POSITION 2項目4にジャンプすると、が表示されますPOSITION 2 POSITION 3 POSITION 4

于 2012-10-31T18:46:54.660 に答える