28666


ViewPagerを使って画面をスワイプして複数の画像が見られるようにしたいと思っています。  
そのときに最初に表示するページを設定したいのですが、  
onCreate内でsetCurrentItemを使うとonPageSelectedが呼ばれないのでFragmentを設定できません。  
onPageSelectedを呼ぶためにはどうしたらいいのでしょうか？

[code]

    imagePager = (ViewPager) findViewById(R.id.imagePager);
    ImagePagerAdapter pagerAdapter = new ImagePagerAdapter(getSupportFragmentManager());
    imagePager.setAdapter(pagerAdapter);
    imagePager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        public void onPageScrollStateChanged(int state) {
        }
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }
        public void onPageSelected(int position) {
            ImagePagerAdapter adapter = (ImagePagerAdapter) imagePager.getAdapter();
            Fragment currentFragment = adapter.findFragmentByPosition(imagePager, position);
            View fragmentView = currentFragment.getView();                
            //fragment内のViewを設定する
        }
    });
    //ページをintentで渡された位置に変える
    imagePager.setCurrentItem(currentPos);
    
[/code]

.

[code]

    class ImagePagerAdapter extends FragmentPagerAdapter {
        public ImagePagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
            return new ImageContentFragment();
        }
    
        @Override
        public int getCount() {
            return imageList.size();
        }
    
        public Fragment findFragmentByPosition(ViewPager viewPager, int position) {
            return (Fragment) instantiateItem(viewPager, position);
        }
    }
    
[/code]


CC BY-SA 3.0
2016-08-30T11:33:10.573
28585
2016-09-03T07:45:44.900
13588
question
android viewpager
AndroidのViewPagerで最初にページが表示されるときにonPageSelectedが呼ばれない


どうしてもonPageSelected()でやりたい場合は、setAdapter() の前に  
addOnPageChangeListener() を呼び出してみてはどうですか。

ViewPager のアクティブになったページに対して処理を行いたい場合は、ImagePagerAdaper#finishUpdate()
内で行った方がいいかと思います。  
ページが切り替わるとき、必ずImagePagerAdapter の startUpdate, setPrimaryItem, finishUpdate
が呼ばれますので。


CC BY-SA 3.0
2016-09-03T07:45:44.900
28666
2016-09-03T07:45:44.900
18683
28585
answer