ViewPager.SimpleOnPageChangeListener不起作用 [英] ViewPager.SimpleOnPageChangeListener Does Not Function

查看:293
本文介绍了ViewPager.SimpleOnPageChangeListener不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ViewPager / PagerAdapter应该让我通过一系列页脚图像以改变所述站(通过改变串PLAYLIST)滑动

...但是当我通过刷卡的图像 - 好像没有什么

任何建议都大大AP preciated!

来源:

 公共类家庭扩展YouTubeBaseActivity工具VideoClickListener {    私人VideosListView的ListView;
    私人ActionBarDrawerToggle actionBarDrawerToggle;
    公共静态最后弦乐API_KEY =XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;
    公共静态最后弦乐VIDEO_ID =o7VVHhK9zf0;
    私人INT mCurrentTabPosition = NO_CURRENT_POSITION;
    私有静态最终诠释NO_CURRENT_POSITION = -1;
    私人DrawerLayout drawerLayout;
    私人的ListView drawerListView;
    私有String [] drawerListViewItems;
    私人ViewPager mPager;
    滚动型mainScrollView;
    按钮fav_up_btn1;
    按钮fav_dwn_btn1;
    字符串标记=DEBUG这个;
    字符串PLAYLIST =EminemVEVO;
    私人OnPageChangeListener mPageChangeListener;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.home);
        最后的动作条动作条= getActionBar();
        ViewPager viewPager =(ViewPager)findViewById(R.id.view_pager);
        ImagePagerAdapter适配器=新ImagePagerAdapter();
        viewPager.setAdapter(适配器);        actionBar.setCustomView(R.layout.actionbar_custom_view_home);
        actionBar.setDisplayShowTitleEnabled(假);
        actionBar.setDisplayShowCustomEnabled(真);
        drawerListViewItems = getResources()getStringArray(R.array.items)。
        drawerListView =(ListView控件)findViewById(R.id.left_drawer);
        drawerListView.setAdapter(新ArrayAdapter<串GT;(这一点,
                R.layout.drawer_listview_item,drawerListViewItems));        drawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
        actionBarDrawerToggle =新ActionBarDrawerToggle(这一点,/ *主机活动* /
                drawerLayout,/ * DrawerLayout对象* /
                R.drawable.ic_drawer,/ *导航抽屉图标来取代上插入符* /
                R.string.drawer_open,/ *打开的抽屉的描述* /
                R.string.drawer_close / *关闭抽屉的描述* /
                );
        drawerLayout.setDrawerListener(actionBarDrawerToggle);        getActionBar()setDisplayHomeAsUpEnabled(真)。        drawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                GravityCompat.START);        mainScrollView =(滚动型)findViewById(R.id.groupScrollView);
        ListView控件=(VideosListView)findViewById(R.id.videosListView);
        listView.setOnVideoClickListener(本);
        新GetYouTubeUserVideosTask(ResponseHandler所,PLAYLIST).execute();
    }    处理器ResponseHandler所=新的处理程序(){
        @覆盖
        公共无效的handleMessage(消息MSG){
            populateListWithVideos(MSG);
        };
    };    私人无效populateListWithVideos(消息MSG){
        库lib =(库)msg.getData()得到(
                GetYouTubeUserVideosTask.LIBRARY);
        listView.setVideos(lib.getVideos());
    }    @覆盖
    保护无效的onStop(){
        ResponseHandler所= NULL;
        super.onStop();
    }    @覆盖
    公共无效onVideoClicked(视频短片){
        意向意图=新意图(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(video.getUrl()));
        startActivity(意向);
    }    @覆盖
    公共无效onConfigurationChanged(配置NEWCONFIG){
        super.onConfigurationChanged(NEWCONFIG);
        actionBarDrawerToggle.onConfigurationChanged(NEWCONFIG);
    }    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        //充气操作栏中使用的菜单项
        MenuInflater吹气= getMenuInflater();
        inflater.inflate(R.menu.main,菜单);
        返回super.onCreateOptionsMenu(菜单);
    }    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        如果(actionBarDrawerToggle.onOptionsItemSelected(项目)){
            返回true;
        }
        返回super.onOptionsItemSelected(项目);
    }    私有类ImagePagerAdapter扩展PagerAdapter {
        公共ImagePagerAdapter(){
            超();        }        私人诠释[] = mImages新INT [] {R.drawable.selstation_up_btn,
                R.drawable.classical_up_btn,R.drawable.country_up_btn,
                R.drawable.dance_up_btn,R.drawable.hiphop_up_btn};        @覆盖
        公众诠释的getCount(){
            返回mImages.length;
        }        @覆盖
        公共布尔isViewFromObject(查看视图,Object对象){
            返回查看==((ImageView的)对象);
        }        @覆盖
        公共对象instantiateItem(ViewGroup中的容器,INT位置){
            上下文的背景下= Home.this;
            ImageView的ImageView的=新ImageView的(上下文);            imageView.setImageResource(mImages [位置]);
            ((ViewPager)容器).addView(ImageView的,0);
            返回ImageView的;
        }        @覆盖
        公共无效destroyItem(ViewGroup中的容器,INT位置,Object对象){
            ((ViewPager)容器).removeView((ImageView的)对象);
        }        私人最终ViewPager.SimpleOnPageChangeListener mPageChangeListener =新ViewPager.SimpleOnPageChangeListener(){            @覆盖
            公共无效使用onPageSelected(最终诠释位置){
                onTabChanged(mPager.getAdapter(),mCurrentTabPosition,位置);
                mCurrentTabPosition =位置;            }
        };        保护无效onTabChanged(最终PagerAdapter适配器,
                最终诠释oldPosition,最终诠释在newPosition){            如果(oldPosition>在newPosition){
                // 左到右
            }其他{
                // 右到左
                字符串PLAYLIST =TimMcGrawVEVO;                查看VG = findViewById(R.layout.home);
                vg.invalidate();
            }
            最后ViewPager viewPager =(ViewPager)findViewById(R.id.view_pager);            viewPager.setOnPageChangeListener(新OnPageChangeListener(){                INT oldPos = viewPager.getCurrentItem();                @覆盖
                公共无效onPageScrolled(INT位置,浮ARG1,ARG2 INT){                    如果(位置> oldPos){
                        //向右移动                    }否则如果(仓位< oldPos){
                        //向左移动
                        字符串PLAYLIST =TimMcGrawVEVO;                        查看VG = findViewById(R.layout.home);
                        vg.invalidate();
                    }
                }                @覆盖
                公共无效onPageScrollStateChanged(INT为arg0){
                    // TODO自动生成方法存根                }                @覆盖
                公共无效使用onPageSelected(INT为arg0){
                    // TODO自动生成方法存根                }            });        }
    }
}


解决方案

您正在不添加监听到你的寻呼机。

您需要调用 setOnPageChangeListener(mPageChangeListener)您pagerAdapter。

例如在构造函数:

 公共ImagePagerAdapter(){
   超();
   setOnPageChangeListener(mPageChangeListener);
}

有关更多信息,请查看文档。 http://developer.android.com/reference/android/support /v4/view/ViewPager.html

I have a ViewPager / PagerAdapter which should allow me to swipe through a series of footer images in order to change the station (by changing the string PLAYLIST):

...however when I swipe through the images - nothing seems to happen.

Any suggestions are greatly appreciated!

SOURCE:

public class Home extends YouTubeBaseActivity implements

VideoClickListener {

    private VideosListView listView;
    private ActionBarDrawerToggle actionBarDrawerToggle;
    public static final String API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    public static final String VIDEO_ID = "o7VVHhK9zf0";
    private int mCurrentTabPosition = NO_CURRENT_POSITION;
    private static final int NO_CURRENT_POSITION = -1;
    private DrawerLayout drawerLayout;
    private ListView drawerListView;
    private String[] drawerListViewItems;
    private ViewPager mPager;
    ScrollView mainScrollView;
    Button fav_up_btn1;
    Button fav_dwn_btn1;
    String TAG = "DEBUG THIS";
    String PLAYLIST = "EminemVEVO‎";
    private OnPageChangeListener mPageChangeListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);
        final ActionBar actionBar = getActionBar();
        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImagePagerAdapter adapter = new ImagePagerAdapter();
        viewPager.setAdapter(adapter);

        actionBar.setCustomView(R.layout.actionbar_custom_view_home);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowCustomEnabled(true);


        drawerListViewItems = getResources().getStringArray(R.array.items);
        drawerListView = (ListView) findViewById(R.id.left_drawer);
        drawerListView.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_listview_item, drawerListViewItems));

        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        actionBarDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
                drawerLayout, /* DrawerLayout object */
                R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */
                R.string.drawer_open, /* "open drawer" description */
                R.string.drawer_close /* "close drawer" description */
                );
        drawerLayout.setDrawerListener(actionBarDrawerToggle);

        getActionBar().setDisplayHomeAsUpEnabled(true);

        drawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                GravityCompat.START);

        mainScrollView = (ScrollView) findViewById(R.id.groupScrollView);
        listView = (VideosListView) findViewById(R.id.videosListView);
        listView.setOnVideoClickListener(this);
        new GetYouTubeUserVideosTask(responseHandler, PLAYLIST).execute();
    }

    Handler responseHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            populateListWithVideos(msg);
        };
    };

    private void populateListWithVideos(Message msg) {
        Library lib = (Library) msg.getData().get(
                GetYouTubeUserVideosTask.LIBRARY);
        listView.setVideos(lib.getVideos());
    }

    @Override
    protected void onStop() {
        responseHandler = null;
        super.onStop();
    }

    @Override
    public void onVideoClicked(Video video) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(video.getUrl()));
        startActivity(intent);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        actionBarDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private class ImagePagerAdapter extends PagerAdapter {


        public ImagePagerAdapter() {
            super();

        }

        private int[] mImages = new int[] { R.drawable.selstation_up_btn,
                R.drawable.classical_up_btn, R.drawable.country_up_btn,
                R.drawable.dance_up_btn, R.drawable.hiphop_up_btn };

        @Override
        public int getCount() {
            return mImages.length;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((ImageView) object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Context context = Home.this;
            ImageView imageView = new ImageView(context);

            imageView.setImageResource(mImages[position]);
            ((ViewPager) container).addView(imageView, 0);
            return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((ImageView) object);
        }

        private final ViewPager.SimpleOnPageChangeListener mPageChangeListener = new ViewPager.SimpleOnPageChangeListener() {

            @Override
            public void onPageSelected(final int position) {
                onTabChanged(mPager.getAdapter(), mCurrentTabPosition, position);
                mCurrentTabPosition = position;

            }
        };

        protected void onTabChanged(final PagerAdapter adapter,
                final int oldPosition, final int newPosition) {

            if (oldPosition > newPosition) {
                // left to right
            } else {
                // right to left
                String PLAYLIST = "TimMcGrawVEVO‎";

                View vg = findViewById(R.layout.home);
                vg.invalidate();
            }
            final ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);

            viewPager.setOnPageChangeListener(new OnPageChangeListener() {

                int oldPos = viewPager.getCurrentItem();

                @Override
                public void onPageScrolled(int position, float arg1, int arg2) {

                    if (position > oldPos) {
                        // Moving to the right

                    } else if (position < oldPos) {
                        // Moving to the Left
                        String PLAYLIST = "TimMcGrawVEVO‎";

                        View vg = findViewById(R.layout.home);
                        vg.invalidate();
                    }
                }

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

                }

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

                }

            });

        }
    }
}

解决方案

You're not adding the Listener to your Pager.

You need to call setOnPageChangeListener(mPageChangeListener) on your pagerAdapter.

For example in the Constructor:

public ImagePagerAdapter(){
   super();
   setOnPageChangeListener(mPageChangeListener);
}

for more info, check the docs. http://developer.android.com/reference/android/support/v4/view/ViewPager.html

这篇关于ViewPager.SimpleOnPageChangeListener不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆