Android 滚动期间更改ListView图像
im尝试使用动态图像创建listview,使用asyntask将其下载图像设置为listview。我的问题是,向下滚动的图像会被随机更改Android 滚动期间更改ListView图像,android,android-listview,Android,Android Listview,im尝试使用动态图像创建listview,使用asyntask将其下载图像设置为listview。我的问题是,向下滚动的图像会被随机更改 class ps1 extends ArrayAdapter<String> { Context context; String[] images1; List mList; String[] namearray; String[] rating; static class ViewHolder {
class ps1 extends ArrayAdapter<String> {
Context context;
String[] images1;
List mList;
String[] namearray;
String[] rating;
static class ViewHolder {
ImageView localImageView1;
ImageView localImageView2;
ImageView localImageView3;
}
ps1(Context paramContext, String[] paramArrayOfString1, String[] paramArrayOfString2, String[] paramArrayOfString3) {
super(paramContext, R.layout.list2, R.id.imageView1, paramArrayOfString1);
this.context = paramContext;
this.images1 = paramArrayOfString3;
this.namearray = paramArrayOfString1;
this.rating = paramArrayOfString2;
}
public View getView(int paramInt, View paramView, ViewGroup paramViewGroup) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
ViewHolder viewHolder = new ViewHolder();
if (paramView == null) {
paramView = inflater.inflate(R.layout.list2, paramViewGroup, false);
}
viewHolder.localImageView1 = (ImageView) paramView
.findViewById(R.id.imageView1);
viewHolder.localImageView2 = (ImageView) paramView
.findViewById(R.id.imageView2);
viewHolder.localImageView3 = (ImageView) paramView
.findViewById(R.id.imageView3);
viewHolder.localImageView1.setScaleType(ImageView.ScaleType.FIT_XY);
viewHolder.localImageView2.setScaleType(ImageView.ScaleType.FIT_XY);
viewHolder.localImageView3.setScaleType(ImageView.ScaleType.FIT_XY);
viewHolder.localImageView1.setTag(this.namearray[paramInt]);
new LoadImage().execute(viewHolder.localImageView1);
viewHolder.localImageView2.setTag(this.rating[paramInt]);
new LoadImage().execute(viewHolder.localImageView2);
viewHolder.localImageView3.setTag(this.images1[paramInt]);
new LoadImage().execute(viewHolder.localImageView3);
return paramView;
}
}
class LoadImage extends AsyncTask<Object, Void, Bitmap> {
private ImageView imv;
private Bitmap download_Image(String paramString) {
Bitmap localBitmap = null;
try {
Object localObject = null;
localBitmap = BitmapFactory
.decodeStream(((HttpURLConnection) new URL(paramString)
.openConnection()).getInputStream());
localObject = localBitmap;
if (localObject != null) {
return localBitmap;
}
} catch (Exception e) {
}
return localBitmap;
}
protected Bitmap doInBackground(Object... paramVarArgs) {
this.imv = ((ImageView) paramVarArgs[0]);
Log.d("fsdf", (String) this.imv.getTag());
return download_Image((String) this.imv.getTag());
}
protected void onPostExecute(Bitmap paramBitmap) {
this.imv.setImageBitmap(paramBitmap);
}
}
class ps1扩展了ArrayAdapter{
语境;
字符串[]图像1;
列表列表;
字符串[]名称数组;
字符串[]额定值;
静态类视窗夹{
图像视图局部图像视图1;
图像视图局部图像视图2;
图像视图局部图像视图3;
}
ps1(上下文paramContext,字符串[]paramarayofstring1,字符串[]paramarayofstring2,字符串[]paramarayofstring3){
super(paramContext,R.layout.list2,R.id.imageView1,paramArrayOfString1);
this.context=paramContext;
this.images1=paramArrayOfString3;
this.namearray=paramArrayOfString1;
this.rating=paramArrayOfString2;
}
公共视图getView(int-paramInt、View-paramView、ViewGroup-paramViewGroup){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
ViewHolder ViewHolder=新ViewHolder();
if(paramView==null){
paramView=充气机。充气(R.layout.list2,paramViewGroup,false);
}
viewHolder.localImageView1=(图像视图)参数视图
.findViewById(R.id.imageView1);
viewHolder.localImageView2=(图像视图)参数视图
.findViewById(R.id.imageView2);
viewHolder.localImageView3=(图像视图)参数视图
.findViewById(R.id.imageView3);
viewHolder.localImageView1.setScaleType(ImageView.ScaleType.FIT_XY);
viewHolder.localImageView2.setScaleType(ImageView.ScaleType.FIT_XY);
viewHolder.localImageView3.setScaleType(ImageView.ScaleType.FIT_XY);
viewHolder.localImageView1.setTag(this.namearray[paramInt]);
新建LoadImage().execute(viewHolder.localImageView1);
viewHolder.localImageView2.setTag(this.rating[paramInt]);
新建LoadImage().execute(viewHolder.localImageView2);
viewHolder.localImageView3.setTag(this.images1[paramInt]);
新建LoadImage().execute(viewHolder.localImageView3);
返回参数视图;
}
}
类LoadImage扩展了异步任务{
私有ImageView imv;
私有位图下载\u图像(字符串参数字符串){
位图localBitmap=null;
试一试{
对象localObject=null;
localBitmap=BitmapFactory
.decodeStream(((HttpURLConnection)新URL(paramString)
.openConnection()).getInputStream());
localObject=localBitmap;
if(localObject!=null){
返回本地位图;
}
}捕获(例外e){
}
返回本地位图;
}
受保护位图doInBackground(对象…paramVarArgs){
this.imv=((ImageView)paramVarArgs[0]);
d(“fsdf”,(字符串)this.imv.getTag();
返回下载图片((字符串)this.imv.getTag());
}
受保护的void onPostExecute(位图参数位图){
此.imv.setImageBitmap(paramBitmap);
}
}
我也有过同样的经历。我也在寻找正确的解决办法。据我所搜索的,我知道ListView会在向下滚动时清除上一个视图,并在向后滚动时重新加载它。因此,在上下滚动时,您的图像可能会重新循环并对齐错误。(我也在等待正确的解决方案)
但我已经用了,这是一个直接下载图像并将其设置为ImageView的库。它将在缓存中维护图像,因此您可以获得正确的图像
相对而言,这也更快 试试我在应用程序中使用的这段代码,它在我的应用程序中运行良好,我相信它在您的应用程序中也能正常工作。 在我的情况下,我从服务器检索图像和一些数据,并保持列表上的所有图像滚动良好
class OfferCustomListAdapter extends ArrayAdapter<String>
{
private Context context;
Boolean OddNumber;
ArrayList<String> getDealID = new ArrayList<String>();
ArrayList<String> getInAdpterUNamedlist = new ArrayList<String>();
ArrayList<String> getShopNData = new ArrayList<String>();
ArrayList<String> getUserFav = new ArrayList<String>();
ArrayList<String> getTotalAmt = new ArrayList<String>();
ArrayList<String> getDealImage = new ArrayList<String>();
ArrayList<Boolean> getBoolnState = new ArrayList<Boolean>();
//String Oflist[] ;
int favCount=0;
public OfferCustomListAdapter(Context context,ArrayList<String> dealIdlist, ArrayList<Boolean> AddBoolnList, ArrayList<String> dealNamelist,ArrayList<String> ShopNList,ArrayList<String> UserFave,ArrayList<String> TotalAmt,ArrayList<String> ImageList) {
super(context, android.R.layout.simple_list_item_1,dealNamelist);
this.context=context;
//Oflist = getFolwerUNamelis;
getDealID = dealIdlist;
getInAdpterUNamedlist = dealNamelist;
getShopNData = ShopNList;
getUserFav = UserFave;
getTotalAmt = TotalAmt;
getDealImage = ImageList;
getBoolnState = AddBoolnList;
}
@Override
public View getView(final int pos, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
LayoutInflater inflater = LayoutInflater.from(this.context);
//view = inflater.inflate(R.layout.offer_custom_list, parent,false);
view = inflater.inflate(R.layout.reservatin_row, parent,false);
holder = new ViewHolder();
//holder.FollowrName = (TextView) view.findViewById(R.id.OfferNameTxt);
holder.DealName = (TextView) view.findViewById(R.id.tv_name);
holder.ShopName = (TextView) view.findViewById(R.id.tv_address);
holder.FavBtn = (ImageView) view.findViewById(R.id.Ofr_FavBtn);
holder.listLayout = (LinearLayout) view.findViewById(R.id.OfferListLayout);
holder.profile_image = (ImageView)view.findViewById(R.id.profile_img);
holder.OfferAmtBtn =(Button)view.findViewById(R.id.TotalOfrBtn);
//holder.FavBtn = (ImageView) view.findViewById(R.id.offerFavBtn);
holder.FavBtn.setTag(pos);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
if ( pos % 2 == 0 ){
System.out.println("You entered an even number. "+pos % 2);
holder.listLayout.setBackgroundResource(R.drawable.offer_list_bg);
}else{
System.out.println("You entered an odd number.");
holder.listLayout.setBackgroundResource(R.drawable.special_offer_bg);
}
/*if(getUserFav.get(pos).equals("0")){
//BolArraylist.add(false);
holder.FavBtn.setBackgroundResource(R.drawable.fav_btn);
}else{
//BolArraylist.add(true);
holder.FavBtn.setBackgroundResource(R.drawable.fav_active_btn);
}*/
holder.DealName.setText(getInAdpterUNamedlist.get(pos));
holder.ShopName.setText(getShopNData.get(pos));
holder.OfferAmtBtn.setText("$"+getTotalAmt.get(pos));
imgLoader.DisplayImage(getDealImage.get(pos), holder.profile_image);
holder.FavBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (isNetworkAvailable()) {
if(!userid.equals("")){
Offer_ID = getDealID.get(pos);
GUsrFavState = getUserFav.get(pos);
if(GUsrFavState.equals("0")){
GUsrFavState="1";
getUserFav.remove(pos);
getUserFav.add(pos, "1");
holder.FavBtn.setBackgroundResource(R.drawable.fav_active_btn);
getBoolnState.set(pos, true);
new Call_OfferFavWS().execute();
}else{
GUsrFavState="0";
holder.FavBtn.setBackgroundResource(R.drawable.fav_btn);
getUserFav.remove(pos);
getUserFav.add(pos, "0");
getBoolnState.set(pos, false);
new Call_OfferFavWS().execute();
}
}else{
Intent CallSignIn = new Intent(DollarMainActivity.this,SingInActivity.class);
startActivity(CallSignIn);
}
} else {
Toast alrtMsg = Toast.makeText(DollarMainActivity.this, "No network connection available !!!", Toast.LENGTH_LONG);
alrtMsg.setGravity(Gravity.CENTER, 0, 0);
alrtMsg.show();
}
}
});
if(getBoolnState.get(pos)){
holder.FavBtn.setBackgroundResource(R.drawable.fav_active_btn);
}else{
holder.FavBtn.setBackgroundResource(R.drawable.fav_btn);
}
return view;
}
class ViewHolder {
public TextView DealName,ShopName;
public ImageView FavBtn, profile_image;
public LinearLayout listLayout;
public Button OfferAmtBtn;
}
}
类的CircustomListAdapter扩展了ArrayAdapter
{
私人语境;
布尔奇数;
ArrayList getDealID=新的ArrayList();
ArrayList getInAdpterUNamedlist=新建ArrayList();
ArrayList getshopnada=新的ArrayList();
ArrayList getUserFav=新的ArrayList();
ArrayList GetTotalAt=新的ArrayList();
ArrayList getDealImage=新建ArrayList();
ArrayList GetBoolState=新建ArrayList();
//列表字符串[];
整数favCount=0;
public OfferCustomListAdapter(上下文上下文、ArrayList DealId列表、ArrayList AddBoolnList、ArrayList dealNamelist、ArrayList ShopNList、ArrayList UserFave、ArrayList TotalAmt、ArrayList ImageList){
super(context,android.R.layout.simple\u list\u item\u 1,dealNamelist);
this.context=context;
//Oflist=getFolwerUNamelis;
getDealID=dealIdlist;
getInAdpterUNamedlist=dealNamelist;
getshopnada=ShopNList;
getUserFav=UserFave;
getTotalAmt=总金额;
getDealImage=ImageList;
getBoolnState=AddBoolnList;
}
@凌驾
公共视图getView(最终int pos、视图视图、视图组父视图){
最终持票人;
如果(视图==null){
LayoutInflater充气器=LayoutInflater.from(this.context);
//视图=充气机。充气(R.layout.offer\u custom\u list,parent,false);
视图=充气机。充气(R.layout.reservatin_行,父级,false);
holder=新的ViewHolder();
//holder.FollowrName=(TextView)view.findViewById(R.id.offerNameText);
holder.DealName=(TextView)view.findViewById(R.id.tv\u name);
holder.ShopName=(TextView)view.findViewById(R.id.tv_地址);
holder.FavBtn=(ImageView)view.findViewById(R.id.of R_FavBtn);
holder.listLayout=(LinearLayout)view.findViewById(R.id.OfferListLayout);
holder.profile\u image=(ImageView)view.findViewById(R.id.profile\u img);
holder.OfferAmtBtn=(按钮)view.findViewById(R.id.TotalOfrBtn);
//holder.FavBtn=