Java Asynctask类中的Imageview被调用两次

Java Asynctask类中的Imageview被调用两次,java,android,constructor,android-asynctask,Java,Android,Constructor,Android Asynctask,我已经为viewpager编写了一个程序,使用pageradapter显示图像,但我遇到了一个问题,因为只有两个图像我正在将其添加到列表并返回列表 我添加了一个println来查看图像是否被正确调用,它们被调用了,但是调用了两次 public class CustomPagerAdapter extends PagerAdapter { Context mContext; LayoutInflater mLayoutInflater; public ImageView imageView;

我已经为viewpager编写了一个程序,使用pageradapter显示图像,但我遇到了一个问题,因为只有两个图像我正在将其添加到列表并返回列表

我添加了一个println来查看图像是否被正确调用,它们被调用了,但是调用了两次

public class CustomPagerAdapter extends PagerAdapter {

Context mContext;
LayoutInflater mLayoutInflater;
public ImageView imageView;

String[] imgURLS = { "http://www.picture-newsletter.com/arctic/arctic-
         18.jpg",
        "http://www.picture-newsletter.com/arctic/arctic-20.jpg" };

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

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return imgURLS.length;
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    // TODO Auto-generated method stub
    return arg0 == ((RelativeLayout) arg1);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    mLayoutInflater = (LayoutInflater)  
    mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, 
    false);
    imageView = (ImageView) itemView.findViewById(R.id.imageView);
    new LoadImage(imageView).execute();
    container.addView(itemView);
    return itemView;

}

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

}

class LoadImage extends AsyncTask<String, String, List<Bitmap>> {

Bitmap bm = null;
List<Bitmap> bmList = new ArrayList<Bitmap>();
ImageView imageView;

public LoadImage(ImageView imageView) {
    System.out.println("LoadImage constructor called...");
    this.imageView = imageView;
}

@Override
protected List<Bitmap> doInBackground(String... params) {
    // TODO Auto-generated method stub
    URL imgUrl = null;
    InputStream is = null;
    HttpURLConnection conn = null;

    try {
        imgUrl = new URL("http://www.picture-newsletter.com/arctic/arctic-
        18.jpg");
        conn = (HttpURLConnection) imgUrl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        is = conn.getInputStream();
        bm = BitmapFactory.decodeStream(is);// Convert to bitmap
        bmList.add(bm);
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        imgUrl = new URL("http://www.picture-newsletter.com/arctic/arctic-
        20.jpg");
        conn = (HttpURLConnection) imgUrl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        is = conn.getInputStream();
        bm = BitmapFactory.decodeStream(is);// Convert to bitmap
        bmList.add(bm);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return bmList;
}

protected void onPostExecute(List<Bitmap> bmList) {
    for (Bitmap bitmap : bmList) {
        System.out.println("Adding bm to imageView....");
        imageView.setImageBitmap(bitmap);
    }
    super.onPostExecute(bmList);
}

构造函数和AsyncTask被调用两次,因为

公共对象实例化项(视图组容器,int位置)

方法被调用两次

public class CustomPagerAdapter extends PagerAdapter {

Context mContext;
LayoutInflater mLayoutInflater;
public ImageView imageView;

String[] imgURLS = { "http://www.picture-newsletter.com/arctic/arctic-
         18.jpg",
        "http://www.picture-newsletter.com/arctic/arctic-20.jpg" };

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

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return imgURLS.length;
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    // TODO Auto-generated method stub
    return arg0 == ((RelativeLayout) arg1);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    mLayoutInflater = (LayoutInflater)  
    mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, 
    false);
    imageView = (ImageView) itemView.findViewById(R.id.imageView);
    new LoadImage(imageView).execute();
    container.addView(itemView);
    return itemView;

}

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

}

class LoadImage extends AsyncTask<String, String, List<Bitmap>> {

Bitmap bm = null;
List<Bitmap> bmList = new ArrayList<Bitmap>();
ImageView imageView;

public LoadImage(ImageView imageView) {
    System.out.println("LoadImage constructor called...");
    this.imageView = imageView;
}

@Override
protected List<Bitmap> doInBackground(String... params) {
    // TODO Auto-generated method stub
    URL imgUrl = null;
    InputStream is = null;
    HttpURLConnection conn = null;

    try {
        imgUrl = new URL("http://www.picture-newsletter.com/arctic/arctic-
        18.jpg");
        conn = (HttpURLConnection) imgUrl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        is = conn.getInputStream();
        bm = BitmapFactory.decodeStream(is);// Convert to bitmap
        bmList.add(bm);
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        imgUrl = new URL("http://www.picture-newsletter.com/arctic/arctic-
        20.jpg");
        conn = (HttpURLConnection) imgUrl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        is = conn.getInputStream();
        bm = BitmapFactory.decodeStream(is);// Convert to bitmap
        bmList.add(bm);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return bmList;
}

protected void onPostExecute(List<Bitmap> bmList) {
    for (Bitmap bitmap : bmList) {
        System.out.println("Adding bm to imageView....");
        imageView.setImageBitmap(bitmap);
    }
    super.onPostExecute(bmList);
}
调用上述方法的次数取决于

public int getCount()


方法。在您的情况下,您返回的是
imgURLS.length
值为2。

两次调用有什么问题吗?因为
instantiateItem
调用取决于getCount方法返回的计数如果在数组中再添加一个url,那么它将调用三次我在字符串数组中再添加一个url,但仍然返回相同的东西,正如您所说的,先生,计数应该增加,但不是,为什么构造函数会被调用两次?调用LoadImage构造函数,调用LoadImage构造函数@narahari_arjun:尝试调用
setOffscreenPageLimit(1)
as
viewPager.setOffscreenPageLimit(1)
没有更改,先生,上面的操作是什么,您能解释一下吗,我在数组中添加了另一个url,但构造函数只被调用了两次02-26 13:01:48.003:i/System.out(23636):LoadImage构造函数调用了。。。02-26 13:01:48.008:I/System.out(23636):LoadImage构造函数调用。。。