在android中滚动时,如何避免在获取准确图像之前在特定位置加载其他图像?
我正在使用recyclerview列出图像,而不使用第三方。我从internet获取图像。我面临的问题是,在将图像加载到特定位置之前,我在特定位置上获得了其他图像,之后在滚动时获得了原始图像在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
@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我如何在代码中实现队列概念。你能告诉我……我得到了解决方案。