簡體   English   中英

Android從片段中檢測ViewPager上的OnPageChangeListener

[英]Android detecting OnPageChangeListener on a ViewPager from within a fragment

嗨,我有一個ViewPager,它已使用片段適配器為每個頁面創建一個片段。 在每個片段上,我都有一個ImageView,每次該頁面出現在屏幕上時都希望對其進行動畫處理。

我的ViewPager當前會預加載第1頁和第2頁,因此動畫不會在第2頁上運行,但在第3頁上有效。 我添加了一個onPageChangedListener,但不確定如何實現它,因此它與我的片段適配器通信並運行動畫。 有誰知道如何從片段中正確檢測頁面更改,或者以有效的內存管理方式禁用頁面預加載?

到目前為止我一直在嘗試

我在ViewPager中的活動

public void getAdapter(){
         CustomViewPager pager = (CustomViewPager) findViewById(R.id.tutorialPager);
         pager.setPagingEnabled(true);
         pager.setOffscreenPageLimit(-1);
         adapterViewPager = new MyPagerAdapter(getSupportFragmentManager(),this);
         pager.setAdapter(adapterViewPager);
         CirclePageIndicator Indicator = (CirclePageIndicator)findViewById(R.id.circles);
         Indicator.setViewPager(pager);

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_tutorial_view);
        getAdapter();
        extras = getIntent().getExtras();
    }


        public static class MyPagerAdapter extends FragmentPagerAdapter {

            private Context context;

            public MyPagerAdapter(android.support.v4.app.FragmentManager fragmentManager,Context c) {

                super(fragmentManager);
                context = c;
            }


            @Override
            public int getCount() {
                int levelCount = 4;
                return levelCount;
            }

            // Returns the fragment to display for that page
            @Override
            public TutorialAdapter getItem(int position) {
                String data = null;

                return TutorialAdapter.newInstance(position, data, context);

            }


            @Override
            public CharSequence getPageTitle(int position) {
                return "Page " + position;
            }

        }

       public static class onPageChangedListener implements OnPageChangeListener {

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub

        }

       }

    }

這是我的onCreateView中的片段適配器

if(page == 1){
                view = inflater.inflate(R.layout.layout_tutorial, container, false);


                tutImage = (ImageView)view.findViewById(R.id.tutImage);
                int imageResource = getResources().getIdentifier("tut_view_2", "drawable", context.getPackageName());
                Drawable tutImageDrawable = getResources().getDrawable(imageResource);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    tutImage.setBackground(tutImageDrawable);
                }else{
                    tutImage.setBackgroundDrawable(tutImageDrawable);
                }

                Animation AniMoveUp = AnimationUtils.loadAnimation(context, R.anim.tut_image);  
                tutImage.startAnimation(AniMoveUp);

這是一個示例Android應用程序,它使用兩種新方法擴展了片段生命周期:onResumeViewPage()和onPauseViewPage()。 如果將動畫代碼放在onResumeViewPage()中,它將可以正常工作。

請參閱:BitBucket中的Slider Android應用程序

將您的startAnimation調用移至Fragments的onResume方法。 這樣,當“片段”可見時,動畫將開始。 有關更多詳細說明,請參見Fragment LifeCycle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM