1

アクティビティでビューページャを使用しています。シーケンスは次のとおりです。最初のページの次のボタンをクリックすると、2ページ目に移動します。 2番目のページのボタンをクリックすると3番目のページに移動します。しかし、私の現在のアプリは奇妙な動作をしています。つまり、2番目のページの次のボタンをクリックすると、4番目のページに移動します。最初のページの最初のボタンをクリックすると再び3ページ目にジャンプします。2番目のフラグメントアンドロイドのボタンをクリックすると、ページャが不規則な位置にスキップします。

ここはコードです。

public class ViewPagerActivity extends AppCompatActivity { 
    private ViewPager pager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewpager_act); 
     setViewPager(); 

     /*pager.setPageTransformer(true, new ZoomPageTransformer()); 

     pager.setAdapter(new MyViewPagerAdapter(getSupportFragmentManager())); 
     pager.post(new Runnable() { 
      @Override 
      public void run() { 
       pager.setCurrentItem(position); //don't know how to use this from fragment 
      } 
     });*/ 
    } 

    private void setViewPager() { 
     pager = (ViewPager) findViewById(R.id.viewPager); 
     FragmentManager fm = getSupportFragmentManager(); 
     ViewPagerAdapter adapter = new ViewPagerAdapter(fm); 
     pager.setAdapter(adapter); 

    } 

    public void setCurrentItem(int selectedPosition) { 
     pager.setCurrentItem(selectedPosition, true); 
    } 

    private class ViewPagerAdapter extends FragmentPagerAdapter { 
     public ViewPagerAdapter(FragmentManager supportFragmentManager) { 
      super(supportFragmentManager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return FirstPager.newInstance(); 
       case 1: 
        return SecondPager.newInstance(); 
       case 2: 
        return ThirdPager.newInstance(); 
       case 3: 
        return FourthPager.newInstance(); 
       case 4: 
        return FifthPager.newInstance(); 
       case 5: 
        return SixthPager.newInstance(); 
       default: 
        return null; 
      } 

     } 

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

FirstPager:他のフラグメントで同様に

public class FirstPager extends Fragment { 
    private ImageView slideArrow; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.first_pager, container, false); 
     return v; 
    } 

    public static FirstPager newInstance() { 
     FirstPager fragment = new FirstPager(); 
     return fragment; 
    } 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     initUI(); 
    } 

    private void initUI() { 
     slideArrow = (ImageView) getActivity().findViewById(R.id.next_arrow); 
     slideArrow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ((ViewPagerActivity)getActivity()).setCurrentItem (1); 
      } 
     }); 
    } 
} 

、私は2,3,4,5および6としてのCurrentItemを与えた。しかし、それは動作が正しくない位置です。

私はpostを参照しましたが、私の場合、どのように正しく動作する位置を作るためにフラグメントから渡す方法をどのように適用するのですか?

+0

?あなたは何をクリックしていますか? –

+0

すべてのフラグメントにボタンがあります。すなわち次のボタン。次のボタンをクリックすると、次のページにスワイプします。しかし、問題はポジションが適切ではないということです。 @RushiAyyappa – Shadow

+0

あなたはそのボタンコードを投稿できますか? –

答えて

4

viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); 
+0

はい、あなたは完璧です。 – Shadow

+0

@Shadow Glad、助けてもらえます:) –

0

あなたはここに2つのことを行うことができます。

  • まず、あなたのviewpagerは、選択ページの位置決幅を返すonPageSelectedオーバーライドメソッドを()があります。このpoistion要素を使用して、ビューを取得し、そこでボタンをバインドし、そこにリスナーを記述し、viewpager.setCurrentItem(i ++)を記述します。 //私が現在の位置であるが、それが最後の項目であるかどうかを確認することを忘れないでください。
  • 第二に、あなたは私が最善のアプローチは、このことだと思う現在のフラグメントの位置を保持し、

    ((ViewPagerActivity)getActivity()).setCurrentItem (next_frag_pos); 
    

1
slideArrow = (ImageView) getActivity().findViewById(R.id.next_arrow); 

あなたですか?確かに、あなたはこれを正しく呼んでいますか?あなたではない。

アクティビティ内で矢印のfindViewByIdを呼び出しています。 ViewPagerは、このページを読み込んで、スムーズにスワイプするために次ページと前ページをあらかじめロードします。第1ページのボタンをクリックすると、最後に読み込まれたページの(2ページ目の)ボタンのクリックイベントが呼び出されます。

は、あなたがこのような何かを行うことができ、あなたの断片

のそれぞれの矢印ボタンを使用する必要があります。

public class FirstPager extends Fragment { 
    private ImageView slideArrow; 
    View v; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     v = inflater.inflate(R.layout.first_pager, container, false); 
     return v; 
    } 

    public static FirstPager newInstance() { 
     FirstPager fragment = new FirstPager(); 
     return fragment; 
    } 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     initUI(); 
    } 

    private void initUI() { 
     slideArrow = (ImageView) v.findViewById(R.id.next_arrow); // Note the difference in this line. 
     slideArrow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ((ViewPagerActivity)getActivity()).setCurrentItem (1); 
      } 
     }); 
    } 
} 
+0

omg。はい、私はこれも気づいていませんでした。 :-) – Shadow

0

このコードトライは完璧な作業します。あなたがクリックされ

public class ViewPagerActivity extends FragmentActivity { 

private ViewPager pager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.viewpager_act); 
    setViewPager(); 

    /*pager.setPageTransformer(true, new ZoomPageTransformer()); 

    pager.setAdapter(new MyViewPagerAdapter(getSupportFragmentManager())); 
    pager.post(new Runnable() { 
     @Override 
     public void run() { 
      pager.setCurrentItem(position); //don't know how to use this from fragment 
     } 
    });*/ 
} 

private void setViewPager() { 
    pager = (ViewPager) findViewById(R.id.viewPager); 
    FragmentManager fm = getSupportFragmentManager(); 
    ViewPagerAdapter adapter = new ViewPagerAdapter(fm); 
    pager.setAdapter(adapter); 

} 

public void setCurrentItem(int selectedPosition) { 
    pager.setCurrentItem(selectedPosition, true); 
} 
private class ViewPagerAdapter extends FragmentPagerAdapter { 
    public ViewPagerAdapter(FragmentManager supportFragmentManager) { 
     super(supportFragmentManager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return new FirstPager(); 
      case 1: 
       return new SecondPager(); 
      case 2: 
       return new ThirdPager(); 
      case 3: 
       return new FourthPager(); 
      case 4: 
       return new FifthPager(); 
      case 5: 
       return new SixthPager(); 
      default: 
       return null; 
     } 
    } 

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

}

関連する問題