java - Home.ImagePagerAdapter 类型未定义方法 setOnPageChangeListener(ViewPager.SimpleOnPageChangeListener)

标签 java android android-viewpager fragmentpageradapter android-pageradapter

这是我第一次使用 ViewPager 构建东西,我需要一些帮助。我正在尝试实现此处找到的解决方案:

ViewPager.SimpleOnPageChangeListener Does Not Function

然而,当我尝试这样做时 - 我最终得到以下结果:

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

来源:

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

    }
}

}

编辑:

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

                    }

    });

}}}

最佳答案

您的代码(或至少当前代码)的问题是您没有构造函数。相反,您只是有一个 super 调用在茫茫荒野中。在类声明之后有两个左花括号 ({),这很奇怪,但我认为那是因为您不了解 Java 中的构造函数。

试着改变它看起来更像

private class ImagePagerAdapter extends PagerAdapter {

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

此更改很可能会解决所有 3 个错误。

您应该考虑阅读一个很好的教程和下面的文档。

ViewPager Docs

此外,重要的是您知道可以了解哪些构造函数 Here in the Java Docs

关于java - Home.ImagePagerAdapter 类型未定义方法 setOnPageChangeListener(ViewPager.SimpleOnPageChangeListener),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20428600/

相关文章:

android - AVD Manager 中的发布和目标名称为 'null'

android - ViewPager - 获取下一页的部分 View

java - 在 Play Framework 之外访问 Play Framework 模型

java - 具有 180 个 POM 的 Maven 项目——这是一种代码味道吗?

android - 扩大最大宽度的ListView中的ImageView

java - 应用程序在使用 AsyncTask 时挂起并挂起所有线程

android - ViewPager 中显示的第一个 fragment 是我创建的第二个 fragment

android - viewpager 内的 youtube api [android]

java - 减少 Java 中的泛型参数

java - jooq启动: command line to generate classes