图像缩略图未正确设置 [英] Image thumbnails not setting correctly

查看:158
本文介绍了图像缩略图未正确设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个文件浏览器。除了我的图像缩略图加载太慢外,我实现了所有目标。所以我读到我必须转到asynctask然后在post执行更新ui。在运行asynctask之前,我为所有文件提供了一个默认缩略图。在asynctask中我将position作为参数,因为我使用它们设置了标签。然后我使用该位置检查文件。如果那个图像或视频我为它创建了一个位图。在post post中,我创建了一个新的viewholder,并使用getTag(position)为它分配相同的标签。然后我使用setBitmapImage分配位图。问题:即使对于非图像/视频的文件,缩略图也在变化/闪烁。
到目前为止我尝试过的事情:
a)使用AsyncTask为Android ListView更新图像缩略图不正确

b) Android ListView使用AsyncTask更新图像缩略图导致视图回收



<这是我的getView代码:

  @Override 
public View getView(final int position,View convertView, ViewGroup parent){


文件file = new File(String.valueOf(filenames [position]));
if(file.isDirectory()){
img = R.drawable.folder;
}

else {
img = getImage(filenames [position]);
}

ViewHolder viewHolder = null;
if(convertView == null){
LayoutInflater inflator = LayoutInflater.from(getContext());
convertView = inflator.inflate(R.layout.list_item,null);
viewHolder = new ViewHolder();
viewHolder.tv =(TextView)convertView.findViewById(R.id.textView1);
viewHolder.cb =(CheckBox)convertView.findViewById(R.id.checkBox1);
viewHolder.iv =(ImageView)convertView.findViewById(R.id.imageView);
viewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
int getPosition =(整数)buttonView.getTag(); //这里我们使用setTag得到我们为复选框设置的位置。
myList.get(getPosition).setSelected(buttonView.isChecked()); //设置值复选框以保持其状态。
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.textView1,viewHolder.tv);
convertView.setTag(R.id.checkBox1,viewHolder.cb);
convertView.setTag(R.id.checkBox1,viewHolder.iv);
}
else {
viewHolder =(ViewHolder)convertView.getTag();
}
viewHolder.iv.getLayoutParams()。height = 80;
viewHolder.iv.getLayoutParams()。width = 80;
viewHolder.cb.setTag(position);
final ViewHolder ViewHolder = viewHolder;
ViewHolder.iv.setImageResource(img);
ViewHolder.tv.setText(myList.get(position).getName());
ViewHolder.cb.setChecked(myList.get(position).isSelected());


final查看finalConvertView = convertView;
class myTask扩展AsyncTask< Integer,Void,Bitmap> {

int pos;
public myTask(int pos){
this.pos = pos;
}

@Override
protected Bitmap doInBackground(Integer ... params){
Bitmap thumb = null;

if((String.valueOf(filenames [pos]))。contains(。jpeg)|| String.valueOf(filenames [pos])。contains(。jpg)||将String.valueOf(文件名[POS])。包含( PNG )||将String.valueOf(文件名[POS])。包含(。BMP)||将String.valueOf(文件名[POS])。包含( .webp)|| String.valueOf(filenames [pos])。contains(。gif)){
thumb = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(String.valueOf(filenames [pos])) ,64,64);

}
else if((String.valueOf(filenames [pos]))。contains(。mp4)|| String.valueOf(filenames [pos])。contains( .MKV )||将String.valueOf(文件名[POS])。包含(。WEBM )||将String.valueOf(文件名[POS])。包含(。3GP)||将String.valueOf(文件名[ pos])。contains(。3gpp)){
thumb = ThumbnailUtils.createVideoThumbnail(filenames [pos] .getPath(),MediaStore.Video.Thumbnails.MINI_KIND);

}
返回拇指;
}
@Override
protected void onPostExecute(Bitmap thumb){
if(isCancelled()){
return;
}
ViewHolder v =(ViewHolder)finalConvertView.getTag(pos);

if((String.valueOf(filenames [pos]))。contains(。jpeg)|| String.valueOf(filenames [pos])。contains(。jpg)||将String.valueOf(文件名[POS])。包含( PNG )||将String.valueOf(文件名[POS])。包含(。BMP)||将String.valueOf(文件名[POS])。包含( .webp)|| String.valueOf(filenames [pos])。contains(。gif)){

v.iv.setImageBitmap(thumb);
}
else if((String.valueOf(filenames [pos]))。contains(。mp4)|| String.valueOf(filenames [pos])。contains(。mkv) ||将String.valueOf(文件名[POS])。包含( WEBM )||将String.valueOf(文件名[POS])。包含(。3GP)||将String.valueOf(文件名[POS])。 contains(。3gpp)){

v.iv.setImageBitmap(thumb);
}


}
}

myTask m = new myTask(position);
m.execute();

return convertView;



}


解决方案

我终于找到了答案。



这是ListAdapter类:

  class ListAdapter extends ArrayAdapter<模态> {

私人最终上下文背景;
private int img;

private List< Modal>我的列表;
private文件名[];
private List< Integer> selectedItems = new ArrayList< Integer>();
private CheckBox cb;
public ListAdapter(Context context,List< Modal> list,File filenames []){
super(context,R.layout.list_item,list);
this.context = context;
this.myList = list;
this.filenames = filenames;
}


@Override
public int getViewTypeCount(){

if(getCount()> 0){
return getCount();
}
返回1;
}

@Override
public int getItemViewType(int position){

返回位置;
}

@Override
public long getItemId(int position){
return position;
}


静态类ViewHolder {
TextView tv;
CheckBox cb;
静态ImageView iv;
}

public int getImage(File filename){
if(String.valueOf(filename).contains(。rar)|| String.valueOf(filename)。 contains(。zip)){
return R.drawable.archive;
}
else if(String.valueOf(filename).contains(。doc)|| String.valueOf(filename).contains(。docx)){
return R .drawable.doc;
}
else if(String.valueOf(filename).contains(。pdf)){
return R.drawable.pdf;
}
else if(String.valueOf(filename).contains(。txt)){
return R.drawable.txt;
}
else if(String.valueOf(filename).contains(。ppt)|| String.valueOf(filename).contains(。pptx)){
return R .drawable.ppt;
}
else if(String.valueOf(filename).contains(。xls)|| String.valueOf(filename).contains(。xlsx)){
return R .drawable.xls;
}
else if((String.valueOf(filename).contains(。jpeg)|| String.valueOf(filename).contains(。jpg)|| String.valueOf(filename )。载( PNG )||将String.valueOf(文件名)。载(。BMP )||将String.valueOf(文件名)。载(。WEBP)||将String.valueOf(文件名)。 contains(。gif))){
return R.drawable.image;
}
else if((String.valueOf(filename).contains(。mp4)|| String.valueOf(filename).contains(。mkv)|| String.valueOf(filename )。载( WEBM )||将String.valueOf(文件名)。载(。3GP )||将String.valueOf(文件名)。载(。3GPP))||将String.valueOf(文件名) .contains(。MOV)){
return R.drawable.video;
}
else if((String.valueOf(filename).contains(。mp3)|| String.valueOf(filename).contains(。wav)|| String.valueOf(filename )。载( WMA )||将String.valueOf(文件名)。载(。MP2 )||将String.valueOf(文件名)。载(。AAC)||将String.valueOf(文件名)。包含( AC3 )||将String.valueOf(文件名)。载有( AU )||将String.valueOf(文件名)。载有( OGG)||将String.valueOf(文件名)。载有( 。FLAC))){
返回R.drawable.music;
}

else {
返回R.drawable.unknown;
}

}


@Override
public View getView(final int position,View convertView,ViewGroup parent){




文件file = new File(String.valueOf(filenames [position]));
if(file.isDirectory()){
img = R.drawable.folder;
}

else {
img = getImage(filenames [position]);
}


ViewHolder viewHolder = null;

if(convertView == null){
LayoutInflater inflator = LayoutInflater.from(getContext());
convertView = inflator.inflate(R.layout.list_item,null);
viewHolder = new ViewHolder();
viewHolder.tv =(TextView)convertView.findViewById(R.id.textView1);
viewHolder.cb =(CheckBox)convertView.findViewById(R.id.checkBox1);
viewHolder.iv =(ImageView)convertView.findViewById(imageView);
viewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
int getPosition =(整数)buttonView.getTag(); //这里我们使用setTag得到我们为复选框设置的位置。
myList.get(getPosition).setSelected(buttonView.isChecked()); //设置值复选框以保持其状态。
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.textView1,viewHolder.tv);
convertView.setTag(R.id.checkBox1,viewHolder.cb);
convertView.setTag(R.id.checkBox1,viewHolder.iv);
}
else {
viewHolder =(ViewHolder)convertView.getTag();
}

viewHolder.iv.getLayoutParams()。height = 150;
viewHolder.iv.getLayoutParams()。width = 150;
viewHolder.cb.setTag(position);
final ViewHolder ViewHolder = viewHolder;

ViewHolder.tv.setText(myList.get(position).getName());
ViewHolder.cb.setChecked(myList.get(position).isSelected());
viewHolder.iv.setImageResource(img);


Log.v(this,viewHolderMT:+ String.valueOf(viewHolder)+position:+ position);
myTask m = new myTask(position,viewHolder.iv);
m.execute();

return convertView;



}
class myTask扩展AsyncTask<整数,位图,位图> {



int POS机;
ImageView iv;
public myTask(int pos,ImageView iv){
this.pos = pos;
this.iv = iv;
iv.setTag(pos);


}

@Override
protected Bitmap doInBackground(Integer ... params){
Bitmap thumb = null;


if((String.valueOf(filenames [pos]))。contains(。jpeg)|| String.valueOf(filenames [pos])。contains(。jpg )||将String.valueOf(文件名[POS])。包含(。PNG )||将String.valueOf(文件名[POS])。包含(。BMP)||将String.valueOf(文件名[POS] ).contains(。webp)|| String.valueOf(filenames [pos])。contains(。gif)){

thumb = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(String。 valueOf(filenames [pos])),150,150);

}
else if((String.valueOf(filenames [pos]))。contains(。mp4)|| String.valueOf(filenames [pos])。contains( .MKV )||将String.valueOf(文件名[POS])。包含(。WEBM )||将String.valueOf(文件名[POS])。包含(。3GP)||将String.valueOf(文件名[ pos])。contains(。3gpp)|| String.valueOf(filenames [pos])。contains(。MOV)){
thumb = ThumbnailUtils.createVideoThumbnail(filenames [pos] .getPath() ,MediaStore.Video.Thumbnails.MINI_KIND);


}
返回拇指;
}
@Override
protected void onProgressUpdate(Bitmap ... thumb){


}
@Override
protected void onPostExecute(Bitmap thumb){


if(thumb!= null&&(Integer)iv.getTag()== this.pos){
if(
if) (String.valueOf(filenames [pos]))。contains(。jpeg)|| String.valueOf(filenames [pos])。contains(。jpg)|| String.valueOf(filenames [pos])。 contains(。png)|| String.valueOf(filenames [pos])。contains(。bmp)|| String.valueOf(filenames [pos])。contains(。webp)|| String.valueOf (filenames [pos])。contains(。gif)){

iv.setImageBitmap(thumb);

}
else if((String.valueOf(filenames [pos]))。contains(。mp4)|| String.valueOf(filenames [pos])。contains( .MOV)|| String.valueOf(filenames [pos])。contains(。mkv)|| String.valueOf(filenames [pos])。contains(。webm)|| String.valueOf(filenames [ pos])。contains(。3gp)|| String.valueOf(filenames [pos])。contains(。3gpp)){

iv.setImageBitmap(thumb);
}


}





}
}
}

我犯的错误:




  • 在getview()之外移动AsyncTask

  • 在异步构造函数中提供对imageView的引用

  • 同时实现getItemViewType()和getItemId()函数

  • 没有检查onPostExecute中的位置标记,因此图像在洗牌。



这需要一段时间让我弄明白。希望它能帮助别人!


I am trying to make a file explorer. I achieved it all except that my image thumbnails were loading too slow. So I read that I must move to asynctask and then in post execute update the ui. Before running asynctask I provide a default thumbnail to all my files. In asynctask I take position as parameter because I set tags using them. Then I check the file using that position. If thats image or video I create a bitmap for it. In post execute I create a new viewholder and assign it the same tag using getTag(position). Then I assign the bitmap using setBitmapImage. Problem: Thumbnails are changing/blinking even for the files that are not images/videos. Things I have tried so far: a)updating of Image Thumbnails using AsyncTask for Android ListView not coming proper
b)Android ListView updating of Image Thumbnails using AsyncTask Causes View recycling

here is my code for getView:

@Override
public View getView(final int position,  View convertView, ViewGroup parent) {


    File file=new File(String.valueOf(filenames[position]));
    if(file.isDirectory()){
        img=R.drawable.folder;
    }

    else{
        img=getImage(filenames[position]);
    }

    ViewHolder viewHolder = null;
    if (convertView == null) {
        LayoutInflater inflator = LayoutInflater.from(getContext());
        convertView = inflator.inflate(R.layout.list_item, null);
        viewHolder = new ViewHolder();
        viewHolder.tv = (TextView) convertView.findViewById(R.id.textView1);
        viewHolder.cb = (CheckBox) convertView.findViewById(R.id.checkBox1);
        viewHolder.iv= (ImageView)convertView.findViewById(R.id.imageView);
        viewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                int getPosition = (Integer) buttonView.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                myList.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
            }
        });
        convertView.setTag(viewHolder);
        convertView.setTag(R.id.textView1, viewHolder.tv);
        convertView.setTag(R.id.checkBox1, viewHolder.cb);
        convertView.setTag(R.id.checkBox1, viewHolder.iv);
    }
    else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.iv.getLayoutParams().height = 80;
    viewHolder.iv.getLayoutParams().width = 80;
    viewHolder.cb.setTag(position);
    final ViewHolder ViewHolder= viewHolder;
    ViewHolder.iv.setImageResource(img);
    ViewHolder.tv.setText(myList.get(position).getName());
    ViewHolder.cb.setChecked(myList.get(position).isSelected());


    final View finalConvertView = convertView;
    class myTask extends AsyncTask<Integer,Void,Bitmap>{

        int pos;
        public myTask(int pos){
            this.pos=pos;
        }

        @Override
        protected Bitmap doInBackground(Integer... params) {
            Bitmap thumb=null;

            if((String.valueOf(filenames[pos])).contains(".jpeg")||String.valueOf(filenames[pos]).contains(".jpg")||String.valueOf(filenames[pos]).contains(".png")||String.valueOf(filenames[pos]).contains(".bmp")||String.valueOf(filenames[pos]).contains(".webp")||String.valueOf(filenames[pos]).contains(".gif")){
                thumb = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(String.valueOf(filenames[pos])), 64, 64);

            }
            else if((String.valueOf(filenames[pos])).contains(".mp4")||String.valueOf(filenames[pos]).contains(".mkv")||String.valueOf(filenames[pos]).contains(".webm")||String.valueOf(filenames[pos]).contains(".3gp")||String.valueOf(filenames[pos]).contains(".3gpp")){
                thumb=ThumbnailUtils.createVideoThumbnail(filenames[pos].getPath(), MediaStore.Video.Thumbnails.MINI_KIND);

            }
            return thumb;
        }
        @Override
        protected void onPostExecute(Bitmap thumb){
            if(isCancelled()){
                return;
            }
            ViewHolder v= (ViewHolder) finalConvertView.getTag(pos);

            if((String.valueOf(filenames[pos])).contains(".jpeg")||String.valueOf(filenames[pos]).contains(".jpg")||String.valueOf(filenames[pos]).contains(".png")||String.valueOf(filenames[pos]).contains(".bmp")||String.valueOf(filenames[pos]).contains(".webp")||String.valueOf(filenames[pos]).contains(".gif")){

                v.iv.setImageBitmap(thumb);
            }
            else if((String.valueOf(filenames[pos])).contains(".mp4")||String.valueOf(filenames[pos]).contains(".mkv")||String.valueOf(filenames[pos]).contains(".webm")||String.valueOf(filenames[pos]).contains(".3gp")||String.valueOf(filenames[pos]).contains(".3gpp")){

                v.iv.setImageBitmap(thumb);
            }


        }
    }

    myTask m=new myTask(position);
    m.execute();

   return convertView;



}

解决方案

I have finally found answer to this.

Here is the ListAdapter Class:

class ListAdapter extends ArrayAdapter<Modal> {

    private final Context context;
    private int img;

    private List<Modal> myList;
    private File filenames[];
    private List<Integer> selectedItems=new ArrayList<Integer>();
    private CheckBox cb;
    public ListAdapter(Context context, List<Modal> list, File filenames[]) {
        super(context, R.layout.list_item, list);
        this.context = context;
        this.myList = list;
        this.filenames=filenames;
    }


    @Override
    public int getViewTypeCount() {

        if(getCount()>0){
            return getCount();
        }
        return 1;
    }

    @Override
    public int getItemViewType(int position) {

        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }


    static class ViewHolder {
        TextView tv;
        CheckBox cb;
        static ImageView iv;
    }

    public int getImage(File filename){
        if(String.valueOf(filename).contains(".rar")||String.valueOf(filename).contains(".zip")){
            return R.drawable.archive;
        }
        else if(String.valueOf(filename).contains(".doc")||String.valueOf(filename).contains(".docx")){
            return  R.drawable.doc;
        }
        else if(String.valueOf(filename).contains(".pdf")){
            return R.drawable.pdf;
        }
        else if(String.valueOf(filename).contains(".txt")){
            return R.drawable.txt;
        }
        else if(String.valueOf(filename).contains(".ppt")||String.valueOf(filename).contains(".pptx")){
            return R.drawable.ppt;
        }
        else if(String.valueOf(filename).contains(".xls")||String.valueOf(filename).contains(".xlsx")){
            return R.drawable.xls;
        }
        else if((String.valueOf(filename).contains(".jpeg")||String.valueOf(filename).contains(".jpg")||String.valueOf(filename).contains(".png")||String.valueOf(filename).contains(".bmp")||String.valueOf(filename).contains(".webp")||String.valueOf(filename).contains(".gif"))){
            return R.drawable.image;
        }
        else if((String.valueOf(filename).contains(".mp4")||String.valueOf(filename).contains(".mkv")||String.valueOf(filename).contains(".webm")||String.valueOf(filename).contains(".3gp")||String.valueOf(filename).contains(".3gpp"))||String.valueOf(filename).contains(".MOV")){
            return R.drawable.video;
        }
        else if((String.valueOf(filename).contains(".mp3")||String.valueOf(filename).contains(".wav")||String.valueOf(filename).contains(".wma")||String.valueOf(filename).contains(".MP2")||String.valueOf(filename).contains(".AAC")||String.valueOf(filename).contains(".AC3")||String.valueOf(filename).contains(".AU")||String.valueOf(filename).contains(".OGG")||String.valueOf(filename).contains(".FLAC"))){
            return R.drawable.music;
        }

        else {
            return R.drawable.unknown;
        }

    }


    @Override
    public View getView(final int position,  View convertView, ViewGroup parent) {




        File file=new File(String.valueOf(filenames[position]));
        if(file.isDirectory()){
            img=R.drawable.folder;
        }

        else{
            img=getImage(filenames[position]);
        }


        ViewHolder viewHolder = null;

        if (convertView == null) {
            LayoutInflater inflator = LayoutInflater.from(getContext());
            convertView = inflator.inflate(R.layout.list_item, null);
            viewHolder = new ViewHolder();
            viewHolder.tv = (TextView) convertView.findViewById(R.id.textView1);
            viewHolder.cb = (CheckBox) convertView.findViewById(R.id.checkBox1);
            viewHolder.iv= (ImageView)convertView.findViewById(imageView);
            viewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    int getPosition = (Integer) buttonView.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                    myList.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
                }
            });
            convertView.setTag(viewHolder);
            convertView.setTag(R.id.textView1, viewHolder.tv);
            convertView.setTag(R.id.checkBox1, viewHolder.cb);
            convertView.setTag(R.id.checkBox1, viewHolder.iv);
        }
        else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.iv.getLayoutParams().height = 150;
        viewHolder.iv.getLayoutParams().width = 150;
        viewHolder.cb.setTag(position);
        final ViewHolder ViewHolder= viewHolder;

        ViewHolder.tv.setText(myList.get(position).getName());
        ViewHolder.cb.setChecked(myList.get(position).isSelected());
        viewHolder.iv.setImageResource(img);


        Log.v("this","viewHolderMT: "+String.valueOf(viewHolder)+" position: "+position);
        myTask m=new myTask(position,viewHolder.iv);
        m.execute();

       return convertView;



    }
    class myTask extends AsyncTask<Integer,Bitmap,Bitmap>{



        int pos;
        ImageView iv;
        public myTask(int pos,ImageView iv){
            this.pos=pos;
            this.iv=iv;
            iv.setTag(pos);


        }

        @Override
        protected Bitmap doInBackground(Integer... params) {
            Bitmap thumb=null;


            if((String.valueOf(filenames[pos])).contains(".jpeg")||String.valueOf(filenames[pos]).contains(".jpg")||String.valueOf(filenames[pos]).contains(".png")||String.valueOf(filenames[pos]).contains(".bmp")||String.valueOf(filenames[pos]).contains(".webp")||String.valueOf(filenames[pos]).contains(".gif")){

                thumb = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(String.valueOf(filenames[pos])), 150, 150);

            }
            else if((String.valueOf(filenames[pos])).contains(".mp4")||String.valueOf(filenames[pos]).contains(".mkv")||String.valueOf(filenames[pos]).contains(".webm")||String.valueOf(filenames[pos]).contains(".3gp")||String.valueOf(filenames[pos]).contains(".3gpp")||String.valueOf(filenames[pos]).contains(".MOV")){
                thumb=ThumbnailUtils.createVideoThumbnail(filenames[pos].getPath(), MediaStore.Video.Thumbnails.MINI_KIND);


            }
            return thumb;
        }
        @Override
        protected void onProgressUpdate(Bitmap... thumb){


        }
        @Override
        protected void onPostExecute(Bitmap thumb){


            if(thumb!=null && (Integer)iv.getTag()==this.pos) {
                if ((String.valueOf(filenames[pos])).contains(".jpeg") || String.valueOf(filenames[pos]).contains(".jpg") || String.valueOf(filenames[pos]).contains(".png") || String.valueOf(filenames[pos]).contains(".bmp") || String.valueOf(filenames[pos]).contains(".webp") || String.valueOf(filenames[pos]).contains(".gif")) {

                    iv.setImageBitmap(thumb);

                }
                 else if ((String.valueOf(filenames[pos])).contains(".mp4") ||String.valueOf(filenames[pos]).contains(".MOV")|| String.valueOf(filenames[pos]).contains(".mkv") || String.valueOf(filenames[pos]).contains(".webm") || String.valueOf(filenames[pos]).contains(".3gp") || String.valueOf(filenames[pos]).contains(".3gpp")) {

                    iv.setImageBitmap(thumb);
                }


            }





        }
    }
}

Mistakes I was making:

  • Move AsyncTask outside getview()
  • Give a reference to the imageView inside the async constructor
  • Also Implement the getItemViewType() and getItemId() functions
  • Was not checking the position tag in onPostExecute so the images were shuffling.

This took a while for me to figure out. Hope it helps others!

这篇关于图像缩略图未正确设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆