在android中滚动时,如何避免在获取准确图像之前在特定位置加载其他图像?

在android中滚动时,如何避免在获取准确图像之前在特定位置加载其他图像?,android,android-asynctask,android-recyclerview,picasso,Android,Android Asynctask,Android Recyclerview,Picasso,我正在使用recyclerview列出图像,而不使用第三方。我从internet获取图像。我面临的问题是,在将图像加载到特定位置之前,我在特定位置上获得了其他图像,之后在滚动时获得了原始图像 @Override public void onBindViewHolder(MyViewHolder holder, int position) { final ImageDetail current=data.get(position); // holder.image.setImageR

我正在使用recyclerview列出图像,而不使用第三方。我从internet获取图像。我面临的问题是,在将图像加载到特定位置之前,我在特定位置上获得了其他图像,之后在滚动时获得了原始图像

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

  final ImageDetail current=data.get(position);

   // holder.image.setImageResource(current.imageid);.
     Drawable place=holder.image.getContext().getResources().getDrawable(R.drawable.ic_place);
     holder.image.setImageDrawable(place);
     String url=current.imageuri;
     //   notifyItemInserted(position);
     new ShowImage(holder.image).execute(url);


}


enter code here */
public class ShowImage extends AsyncTask<String,Void,Bitmap>{
    private  WeakReference<ImageView> imageview;
    public ShowImage(ImageView imv){
        imageview=new WeakReference<ImageView>(imv);
    }
    /* Background process
     * input:url
     * output: Bitmap image
     * It passed into onPostExecute method
     *
    */
    @Override
    protected Bitmap doInBackground(String... urls) {

       return getBitMapFromUrl(urls[0]);

    }
    /* This method called after the doINputBackground method
     * input:Bitmap image
     * output: image set into the image view
     * Image view  passed from RecyclerViewOperation to ShowImage class through constructor
     *
    */
    @Override
    protected void onPostExecute(Bitmap result) {
        if((imageview!=null)&&(result!=null)){
            ImageView imgview=imageview.get();
             if(imgview!=null){

                 imgview.setImageBitmap(result);

             }
        }
    }
    /* This method called by doInBackground method
     * input:url
     * output: Bitmap image
     *
    */
    private Bitmap getBitMapFromUrl( String imageuri){
        HttpURLConnection connection=null;

        try {
            URL url=new URL(imageuri);
            connection= (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream is=connection.getInputStream();
            Bitmap mybitmap=BitmapFactory.decodeStream(is);
            return mybitmap;

        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        finally {
            if(connection!=null) {
                connection.disconnect();
            }
        }
    }

}
@覆盖
公共无效onBindViewHolder(MyViewHolder,int位置){
最终图像细节当前=数据获取(位置);
//holder.image.setImageResource(current.imageid);。
Drawable place=holder.image.getContext().getResources().getDrawable(R.Drawable.ic_place);
支架。图像。可设置图像绘制(位置);
字符串url=current.imageuri;
//(位置);
新建ShowImage(holder.image).execute(url);
}
在这里输入代码*/
公共类ShowImage扩展异步任务{
私有WeakReference图像视图;
公共ShowImage(ImageView imv){
imageview=新的WeakReference(imv);
}
/*背景过程
*输入:url
*输出:位图图像
*它被传递到onPostExecute方法中
*
*/
@凌驾
受保护位图doInBackground(字符串…URL){
返回getBitMapFromUrl(URL[0]);
}
/*此方法在doINputBackground方法之后调用
*输入:位图图像
*输出:将图像设置到图像视图中
*图像视图通过构造函数从RecycleServiceOperation传递到ShowImage类
*
*/
@凌驾
受保护的void onPostExecute(位图结果){
如果((imageview!=null)&&(result!=null)){
ImageView imgview=ImageView.get();
如果(imgview!=null){
imgview.setImageBitmap(结果);
}
}
}
/*此方法由doInBackground方法调用
*输入:url
*输出:位图图像
*
*/
私有位图getBitMapFromUrl(字符串imageuri){
HttpURLConnection=null;
试一试{
URL URL=新URL(imageuri);
connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream is=connection.getInputStream();
位图mybitmap=BitmapFactory.decodeStream(is);
返回我的位图;
}捕获(格式错误){
e、 printStackTrace();
返回null;
}捕获(IOE异常){
e、 printStackTrace();
返回null;
}
最后{
if(连接!=null){
连接断开();
}
}
}
}

是。这很正常。如果你已经熟悉了,你现在可以猜出原因了

在您的情况下,我见过的最好的解决方案是使用丰富的第三方库。是最好的,依我看

它可爱的特性之一是处理ListView。所以,你可以简单地依靠毕加索来处理这些问题


如果您仍然没有收到通知,请告知我在没有任何第三方的情况下发布答案。

发布您的代码。您希望我们如何在没有任何代码的情况下帮助您?如果您使用自己的实现,请创建一个
队列
,以处理图像下载请求。请填写完整的代码。请解释**新ShowImage(holder.image).执行(url);**这与任何库(volley或任何其他图像加载库)相关。@krrishnaaa我如何在代码中实现队列概念。你能告诉我……我得到了解决方案。