Java Asynctask类中的Imageview被调用两次
我已经为viewpager编写了一个程序,使用pageradapter显示图像,但我遇到了一个问题,因为只有两个图像我正在将其添加到列表并返回列表 我添加了一个println来查看图像是否被正确调用,它们被调用了,但是调用了两次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;
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)
asviewPager.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构造函数调用。。。