Java 为什么实例化它们不';t调用和ViewPager不';不行?

Java 为什么实例化它们不';t调用和ViewPager不';不行?,java,android,android-viewpager,Java,Android,Android Viewpager,我尝试用滑动图像制作简单的应用程序。我使用这篇文章 这是我的带viewpager的xml: main.xml 这是我的xml图像: item.xml 这是我的适配器: ViewerPagerAdapter.java public class ViewerPagerAdapter extends PagerAdapter { private Context mContext; private ArrayList<CueModel> mArray; pr

我尝试用滑动图像制作简单的应用程序。我使用这篇文章

这是我的带viewpager的xml: main.xml


这是我的xml图像: item.xml


这是我的适配器: ViewerPagerAdapter.java

public class ViewerPagerAdapter extends PagerAdapter {

    private Context mContext;
    private ArrayList<CueModel> mArray;
    private LayoutInflater mInflater;
    private ImageView mImage;

    public ViewerPagerAdapter(Context _context){
        mContext = _context;

        mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


    public void setArray(ArrayList<Bitmap> arr){
        mArray = arr;
    }

    @Override
    public int getItemPosition(Object object) {  
        return POSITION_NONE;  
    }  

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
          View itemView = mInflater.inflate(R.layout.item, container, false);
          mImage = (ImageView)itemView.findViewById(R.id.image);
          mImage.setImageBitmap(mArray.get(position));
          container.addView(itemView);

          return itemView;
     }

    @Override
    public int getCount() {
        return mArray.size();
    }

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

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0.equals(arg1);
}
公共类ViewerPagerAdapter扩展了PagerAdapter{
私有上下文;
私人ArrayList mArray;
私人停车场;
私有图像视图;
公共ViewerPagerAdapter(上下文_上下文){
mContext=_上下文;
mInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
}
公共无效集合数组(ArrayList arr){
mArray=arr;
}
@凌驾
public int getItemPosition(对象){
返回位置\无;
}  
@凌驾
公共对象实例化项(视图组容器,int位置){
View itemView=mInflater.充气(R.layout.item,容器,假);
mImage=(ImageView)itemView.findViewById(R.id.image);
setImageBitmap(mArray.get(position));
container.addView(itemView);
返回项目视图;
}
@凌驾
public int getCount(){
返回mArray.size();
}
@凌驾
公共项(视图组容器、int位置、对象){
container.removeView((视图)对象);
}
@凌驾
公共布尔值isViewFromObject(视图arg0,对象arg1){
返回arg0.equals(arg1);
}
这是我的活动: OneActivity.java (充满影像的马里斯)

公共类OneActivity扩展活动{
ArrayList mArrays;
viewerpage适配器mAdapter;
可视寻呼机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main.xml);
mPager=(ViewPager)findViewById(R.id.pages);
mAdapter=newviewerPagerAdapter(OneActivity.this);
mAdapter.setarray(万日);
mPager.setAdapter(mAdapter);
}
}
我不明白我做错了什么。他们没有打电话

PS.我的应用程序和

文章我有一些活动(我的arraylist由items初始化)
感谢您

#instantiateItem()
每当ViewPager需要新视图时都会被调用。最初,它会为中间的视图调用两次
#instantiateItem()
,如果适配器的
getCount()>0
,则会调用右侧的视图。这就是为什么在
\setArray()
方法中需要调用
#notifyDataSetChanged>()
每次更改数组时。每次从列表中添加或删除项目时,也需要调用它。如果您的数组在
#onCreate()
中为空,则
#getCount()==0
,因此ViewPager认为它是空的,不会麻烦。

实例化项()每当ViewPager需要新视图时,都会调用
。最初,它会为中间的视图调用两次
#instantiateItem()
,如果适配器的
getCount()>0
,则会调用右边的视图。这就是为什么在
#setArray()
方法中需要调用
#notifyDataSetChanged()
每次更改数组时。每次从列表中添加或删除项目时也需要调用它。如果在
\onCreate()
中数组为空,则
\getCount()==0
所以ViewPager认为它是空的,不会麻烦。

我知道这是一篇很老的帖子,但我回答这个问题是因为有人会从中受益。我遇到了同样的问题-
实例化Item()
没有被调用。 在尝试了这么多之后,我终于找到了我在代码中犯的错误,这是一个愚蠢的错误,我忘记将适配器设置为viewpager:

viewPager.setAdapter(adapter)

我知道这是一篇很老的帖子,但我回答这个问题是因为有人会从中受益。我遇到了同样的问题-
instanceItem()
没有被调用。 在尝试了这么多之后,我终于找到了我在代码中犯的错误,这是一个愚蠢的错误,我忘记将适配器设置为viewpager:

viewPager.setAdapter(adapter)
对于出现错误消息的现代版本(2020+)

二进制XML文件行#(行号):膨胀类android.viewpager.widget.viewpager时出错 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)上

您可能需要更新

android.support.v4.view.ViewPager到

androidx.viewpager.widget.viewpager

适用于出现错误消息的现代版本(2020+)

二进制XML文件行#(行号):膨胀类android.viewpager.widget.viewpager时出错 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)上

您可能需要更新

android.support.v4.view.ViewPager到


androidx.viewpager.widget.viewpager

您没有填充ArrayList.ArrayList是可以的。我创建并用图像填充它。只是没有写问题您是否正在调用
notifyDatasetChanged()
当您填写列表时?除非您告诉ViewPager有新数据,否则ViewPager不会刷新。我尝试过这样做。每当ViewPager需要新视图时,都不会调用任何changedinstantiateItem。最初,如果适配器的getCount()为中间的视图和右边的视图,它会调用它两次>0。这就是为什么在
setArray()
方法中,每次更改数组时都需要调用
notifyDataSetChanged
。每次添加或删除列表中的项时也需要调用它。如果onCreate()中的数组为空,则getCount()是0,因此ViewPager认为它是空的,不会打扰您。您没有填充ArrayList。ArrayList可以。我创建了它并用图像填充它。只是没有写问题您正在调用
notifyDatasetChanged()
当您填写列表时?除非您告诉ViewPager有新数据,否则ViewPager将不会刷新。我尝试过这样做。状态没有任何变化
public class OneActivity extends Activity {
    ArrayList<Bitmap> mArrays;
    ViewerPagerAdapter mAdapter;
    ViewPager mPager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main.xml);
        mPager = (ViewPager) findViewById(R.id.pages);
        mAdapter = new ViewerPagerAdapter(OneActivity.this);
        mAdapter.setArrays(mArrays);
        mPager.setAdapter(mAdapter);
    }
}
viewPager.setAdapter(adapter)