2017-07-17 13 views
0

私はコラボレーションプロジェクトに取り組んでいます。ここでの目標は、ViewPagerアイテムの位置を表示することです。 addOnPageChangeListenerから取得して位置を表示しようとするなど、いくつかの解決策を試しましたが、機能を作成しましたIntroView クラスは位置を取得するクラスでしたが、ここに私のコード構造があります。どんな助けでも喜んで感謝します。前もって感謝します。ViewPager - アイテムの位置を取得できません


InroActivity.java

public class IntroActivity extends DialogFacebookActivity { 

    private IntroView mIntroView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ChatterApplication.getApplicationComponent().inject(this); 

     mIntroView = new IntroView(this); 
     setContentView(mIntroView); 
     mIntroView.setAdapter(new IntroPagerAdapter(getSupportFragmentManager())); 



    } 

は、ここに私のIntroView.java

public class IntroView extends CoordinatorLayout { 

    @Bind(R.id.view_pager) 
    ViewPager mViewPager; 


    public IntroView(Context context) { 
     super(context); 
     init(); 
    } 


    public IntroView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 


    public IntroView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 



    public void setAdapter(@NonNull PagerAdapter pagerAdapter) { 
     mViewPager.setAdapter(pagerAdapter); 


    } 


    public void goToNextPage() { 
     mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1, true); 

    } 


    public int displayItem(){ 

     return mViewPager.getCurrentItem(); 
    } 

    private void init() { 
     inflate(getContext(), R.layout.view_intro, this); 
     ButterKnife.bind(this); 
    } 

} 

は、ここに私の012ですですIntroFragment.java

public class IntroFragment extends Fragment { 

    private static final String ARG_SECTION_NUMBER = "section_number"; 

    @Inject 
    EventBus mEventBus; 


    IntroView iv; 

    ViewPager vp; 





    public IntroFragment() { 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     ChatterApplication.getApplicationComponent().inject(this); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     final int sectionNumber = getArguments().getInt(ARG_SECTION_NUMBER); 
     IntroPageView view; 


     if (sectionNumber == IntroPagerAdapter.TUTORIAL_PAGE_COUNT) { 
      view = new IntroPageViewLast(getContext()); 

     } else { 
      view = new IntroPageView(getContext(), sectionNumber); 

     } 



     iv= new IntroView(getContext()); 
     vp =(ViewPager) iv.findViewById(R.id.view_pager); 

     Toast.makeText(getContext(),"You are in: " + vp.getCurrentItem() ,Toast.LENGTH_LONG).show(); 


     return view; 
    } 



    public static IntroFragment newInstance(int sectionNumber) { 

      IntroFragment fragment = new IntroFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

    } 

私のフラグメントによって

public class IntroPageView extends RelativeLayout { 

    @Bind(R.id.intro_skip) 
    TextView mSkipButton; 

    @Bind(R.id.intro_tos_disclaimer_link) 
    TextView disclaimer; 

    @Bind(R.id.section_image) 
    ImageView mImageView; 

    private IntroPageViewListener mEventListener; 



    public IntroPageView(Context context, int sectionNumber) { 
      super(context); 
      init(sectionNumber); 
     } 


     public void setListener(IntroPageViewListener listener) { 
      this.mEventListener = listener; 
     } 
     protected void init(int sectionNumber) { 
      inflate(getContext(), R.layout.view_intro_fragment, this); 
      ButterKnife.bind(this); 
      mImageView.setImageResource(IntroPagerAdapter.TUTORIAL_IMAGE_IDS[sectionNumber - 1]); 
     } 

を使用しているここに私のIntroPageViewは、ここに私の* IntroPagerAdapter

です
public class IntroPagerAdapter extends FragmentPagerAdapter { 

    public static final int[] TUTORIAL_IMAGE_IDS = { 
     R.drawable.one, 
     R.drawable.two, 
     R.drawable.third, 
     R.drawable.four 
    }; 

    public static final int TUTORIAL_PAGE_COUNT = TUTORIAL_IMAGE_IDS.length; 





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


    @Override 
    public Fragment getItem(int position) { 
     int sectionNumber = position + 1; 
     return IntroFragment.newInstance(sectionNumber); 
    } 


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

答えて

0

私はバターButterKnife.bind(this)を使用するのを忘れました。 ViewPagerを初期化します。したがって、addOnPageChangeListenerを使用して位置を取得することができました。ソリューションは次のとおりです。

vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      // Toast.makeText(getApplicationContext(), "You are in.....: " + (position + 1),Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 
関連する問題