The method setOnPageChangeListener(ViewPager.SimpleOnPageChangeListener) is undefined for the type Home.ImagePagerAdapter

StackOverflow https://stackoverflow.com/questions/20428600

سؤال

This is my first experience building something with ViewPager and I need a bit of help. I'm attempting to implement a solution found here:

ViewPager.SimpleOnPageChangeListener Does Not Function

However when I attempt to do so - I end up with the following:

The method setOnPageChangeListener(ViewPager.SimpleOnPageChangeListener) is undefined for the type Home.ImagePagerAdapter   line 173:    setOnPageChangeListener(mPageChangeListener);}

Cannot reference a field before it is defined   Home.java line 173:       setOnPageChangeListener(mPageChangeListener);}

Constructor call must be the first statement in a constructor   line 171:    super();

SOURCE:

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 {{
     super();

       setOnPageChangeListener(mPageChangeListener);}
    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){

         }
         else{

             String PLAYLIST = "idconex";

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

    }
}

}

EDIT:

public class Home extends YouTubeBaseActivity implements

VideoClickListener {

    private VideosListView listView;
    private ActionBarDrawerToggle actionBarDrawerToggle;
    public static final String API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    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 = "idconex";
    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();
            setOnPageChangeListener(mPageChangeListener);
        }

        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) {
            //Calc if swipe was left to right, or right to left
             if (oldPosition>newPosition){
               // left to right
             }
             else{
               //right to left 
                 String PLAYLIST = "idconex";

                 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
                            } 
        }

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

                    }

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

                    }

    });

}}}
هل كانت مفيدة؟

المحلول

The problem with your code (or at least current code) is you don't have a constructor. Instead, you just have a super call sitting out in the middle of nowhere. And you have two opening curly brackets({) after the class declaration which is strange but I think that's because you don't understand the constructor in Java.

Try changing it to look more like

private class ImagePagerAdapter extends PagerAdapter {

    // this is your constructor
    public ImagePagerAdapter()
    {
        super();
        setOnPageChangeListener(mPageChangeListener);
    }

This change will most likely take care of all 3 of those errors.

You should consider going through a good tutorial and the docs below.

ViewPager Docs

Also, it is important that you know what constructors are which you can learn about Here in the Java Docs

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top