Android PagerAdapter内部的onClickListener

Android PagerAdapter内部的onClickListener,android,android-layout,android-viewpager,android-button,android-pageradapter,Android,Android Layout,Android Viewpager,Android Button,Android Pageradapter,所以我已经为此挣扎了一段时间。我是一个相当新的android开发者,所以理解一些概念对我来说仍然非常困难 在我的布局中,我使用PagerAdapter在页面之间水平滑动。我想在着陆布局中有一个按钮,单击后滚动到相邻布局 现在我的问题是,一旦我点击那个按钮,我就会得到一个NPE。所以我看到了问题,但不知道如何编写它,使它真正做到它应该做的 这是我的密码 public class CustomPageAdapter extends PagerAdapter { ViewPager mPager;

所以我已经为此挣扎了一段时间。我是一个相当新的android开发者,所以理解一些概念对我来说仍然非常困难

在我的布局中,我使用PagerAdapter在页面之间水平滑动。我想在着陆布局中有一个按钮,单击后滚动到相邻布局

现在我的问题是,一旦我点击那个按钮,我就会得到一个NPE。所以我看到了问题,但不知道如何编写它,使它真正做到它应该做的

这是我的密码

public class CustomPageAdapter extends PagerAdapter {

ViewPager mPager;

public Object instantiateItem(View collection, int position) {

    LayoutInflater inflater = (LayoutInflater) collection.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int resId = 0;
    switch (position) {
        case 0: {
            resId = R.layout.field01;
            break;
        }
        case 1: {
            resId = R.layout.add_site;
            break;
        }
        case 2: {
            resId = R.layout.main;
            break;
        }
    }

    View view = inflater.inflate(resId, null);
    if (position == 1) {
        Button addSiteButton = (Button) view.findViewById(R.id.addSiteButton);
        addSiteButton.setOnClickListener(new OnClickListener() {


            public void onClick(View v) {
             mPager.setCurrentItem(2); //NPE happens here.
            }
        });
    }


    ((ViewPager) collection).addView(view, 0);

    return view;
}

@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager) arg0).removeView((View) arg2);
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == ((View) arg1);

}

@Override
public Parcelable saveState() {
    return null;
}

@Override
public int getCount() {
    return 3;
}
}

提前谢谢

出现NPE是因为您试图访问mPager,它只是一个引用,不指向任何东西,由以下行创建:ViewPager mPager

您需要从mPager参考中的布局检索viewPager,如下所示:


ViewPager mPager=(ViewPager)findViewById(R.id.pager)

出现NPE是因为您试图访问mPager,它只是一个引用,不指向任何东西,由以下行创建:ViewPager mPager

您需要从mPager参考中的布局检索viewPager,如下所示:


ViewPager mPager=(ViewPager)findViewById(R.id.pager)

您应该将片段与viewpager一起使用,在片段中您可以在按钮上定义onClickListener您应该将片段与viewpager一起使用,在片段内部,您可以在按钮上定义onClick Listener。您可以将其添加到onClick内部?您可以将其添加到当前已声明mPager的位置。您可以将其添加到onClick内部?您可以将其添加到当前已声明mPager的位置。