Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滚动期间更改ListView图像_Android_Android Listview - Fatal编程技术网

Android 滚动期间更改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 {

im尝试使用动态图像创建listview,使用asyntask将其下载图像设置为listview。我的问题是,向下滚动的图像会被随机更改

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=