Android 如何在最后一个图像上使用按钮关闭viewAdapter?

Android 如何在最后一个图像上使用按钮关闭viewAdapter?,android,android-viewpager,adapter,Android,Android Viewpager,Adapter,我试图做的是在点击第三个视图中的按钮时关闭图像适配器 我正在按照本教程设置视图,效果很好: 现在我要做的是在最后一个视图中用botton关闭适配器。我得到一个错误,指出该按钮:尝试在空对象引用上调用虚拟方法“void android.widget.button.setOnClickListener(android.view.view$OnClickListener)” 我认为这是因为按钮不在主布局上,而是在视图布局上。那么,如何才能正确访问它以隐藏/关闭适配器 public class Cust

我试图做的是在点击第三个视图中的按钮时关闭图像适配器

我正在按照本教程设置视图,效果很好:

现在我要做的是在最后一个视图中用botton关闭适配器。我得到一个错误,指出该按钮:尝试在空对象引用上调用虚拟方法“void android.widget.button.setOnClickListener(android.view.view$OnClickListener)”

我认为这是因为按钮不在主布局上,而是在视图布局上。那么,如何才能正确访问它以隐藏/关闭适配器

public class CustomPagerAdapter extends PagerAdapter {

    private Context mContext;

    public CustomPagerAdapter(Context context) {
        mContext = context;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {
        ModelObject modelObject = ModelObject.values()[position];
        LayoutInflater inflater = LayoutInflater.from(mContext);
        ViewGroup layout = (ViewGroup) inflater.inflate(modelObject.getLayoutResId(), collection, false);
        collection.addView(layout);
        return layout;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((View) view);
    }

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

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

    @Override
    public CharSequence getPageTitle(int position) {
        ModelObject customPagerEnum = ModelObject.values()[position];
        return mContext.getString(customPagerEnum.getTitleResId());
    }

}
这是主要原因

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView3 = findViewById(R.id.textView3);

        textView3.setVisibility(View.INVISIBLE);

        btnClose=findViewById(R.id.btnClose);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(new CustomPagerAdapter(this));
        viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                viewPager.setVisibility(View.INVISIBLE);
                textView3.setVisibility(View.VISIBLE);
            }
        });

    }
这是适配器

public class CustomPagerAdapter extends PagerAdapter {

    private Context mContext;

    public CustomPagerAdapter(Context context) {
        mContext = context;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {
        ModelObject modelObject = ModelObject.values()[position];
        LayoutInflater inflater = LayoutInflater.from(mContext);
        ViewGroup layout = (ViewGroup) inflater.inflate(modelObject.getLayoutResId(), collection, false);
        collection.addView(layout);
        return layout;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((View) view);
    }

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

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

    @Override
    public CharSequence getPageTitle(int position) {
        ModelObject customPagerEnum = ModelObject.values()[position];
        return mContext.getString(customPagerEnum.getTitleResId());
    }

}
这是模型对象类

public enum ModelObject {

    RED(R.string.red, R.layout.view_red),
    BLUE(R.string.blue, R.layout.view_blue),
    GREEN(R.string.green, R.layout.view_green);

    private int mTitleResId;
    private int mLayoutResId;

    ModelObject(int titleResId, int layoutResId) {
        mTitleResId = titleResId;
        mLayoutResId = layoutResId;
    }

    public int getTitleResId() {
        return mTitleResId;
    }

    public int getLayoutResId() {
        return mLayoutResId;
    }

}

为了知道它是如何工作的,我想隐藏适配器并显示文本视图。同样,我认为问题在于按钮位于另一个布局上,因此我如何调用它?

在main类中实现侦听器并将其传递给viewpager。根据需要附加侦听器,仅附加审阅视图

创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView3=findViewById(R.id.textView3);
textView3.setVisibility(View.INVISIBLE);
viewPager=(viewPager)findViewById(R.id.viewPager);
View.OnClickListener=newview.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
viewPager.setVisibility(View.INVISIBLE);
textView3.setVisibility(View.VISIBLE);
}
}
setAdapter(新的CustomPagerAdapter(this),侦听器);
setPageTransformer(true,新的ZoomOutPageTransformer());
}

公共类CustomPagerAdapter扩展了PagerAdapter{
私有上下文;
private View.OnClickListener mListener;
公共CustomPagerAdapter(上下文,View.OnClickListener侦听器){
mContext=上下文;
mListener=监听器;
}
@凌驾
公共对象实例化项(视图组集合,int位置){
ModelObject ModelObject=ModelObject.values()[position];
LayoutFlater充气机=LayoutFlater.from(mContext);
视图组布局=(视图组)充气器。充气(modelObject.getLayoutResId(),集合,false);
collection.addView(布局);
如果(位置==2){
查看btnClose=layout.findviewbyd(R.id.btnClose);
btnClose.setOnClickListener(mListener);
}
返回布局;
}
@凌驾
公共项(视图组集合、int位置、对象视图){
collection.removeView((视图)视图);
}
@凌驾
public int getCount(){
返回ModelObject.values().length;
}
@凌驾
公共布尔值isViewFromObject(视图,对象){
返回视图==对象;
}
@凌驾
公共字符序列getPageTitle(int位置){
ModelObject customPagerEnum=ModelObject.values()[position];
返回mContext.getString(customPagerEnum.getTitleResId());
}
}

非常感谢!