Java 从下到上滚动ListView滞后

Java 从下到上滚动ListView滞后,java,android,listview,lag,Java,Android,Listview,Lag,我的listview有点滞后 因此,当我向下滚动listview时,性能非常好,但当我向上滚动时,发现我的行时会出现延迟 我正在使用glide查看图像 适配器中的text3Lines方法在我的textView中设置了三行文本。 适配器中的checkClass方法包含一个简单的if条件 在我的OnCreate方法中: 在MyAdapter类中: 提前感谢您的帮助。结果相同,因为您没有正确使用视图固定器。每次调用getView时,都会膨胀视图 public View getView(int posi

我的listview有点滞后

因此,当我向下滚动listview时,性能非常好,但当我向上滚动时,发现我的行时会出现延迟

我正在使用glide查看图像

适配器中的text3Lines方法在我的textView中设置了三行文本。 适配器中的checkClass方法包含一个简单的if条件

在我的OnCreate方法中:

在MyAdapter类中:


提前感谢您的帮助。

结果相同,因为您没有正确使用视图固定器。每次调用getView时,都会膨胀视图

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder;
    if (convertView == null) { 
   // if convertView is null 
       convertView = mInflater.inflate(R.layout.mylayout, parent, false); 
       holder = new ViewHolder(); 
       // initialize views
       convertView.setTag(holder); 
      // set tag on view
     }
    else { 
       holder = (ViewHolder) convertView.getTag(); 
       // if not null get tag // no need to initialize 
    } //update views here return convertView; 
}

使用viewholder模式或使用recylerview而不是listview适配器结果是一样的。我已经用viewholder模式更新了我的代码。哦,是的。这是真的。非常感谢你
      private class MyAdapter extends ArrayAdapter<SOCIAL_POST> {

            TextView listText;
            ImageView listImage;
            CardView listCard;

            RelativeLayout listLayout;
            RelativeLayout.LayoutParams paramsTxt;
            RelativeLayout.LayoutParams paramsImg;
            RelativeLayout.LayoutParams paramsCardView;

            public MyAdapter(Context context, ArrayList<SOCIAL_POST> posts) {
                super(context, -1, -1, posts);
                listLayout = new RelativeLayout(SocialPage.this);

                paramsCardView = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                paramsCardView.leftMargin = width_square*5;
                paramsCardView.rightMargin = width_square*5;
                paramsCardView.topMargin = height_square*5;
                paramsCardView.width = width_square*100;

                paramsImg = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                paramsImg.topMargin = height_square*5;
                paramsImg.height = width_square*50;

                paramsTxt = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                paramsTxt.leftMargin = width_square*10;
                paramsTxt.rightMargin = width_square*10;
                paramsTxt.topMargin = height_square*5;
                paramsTxt.width = width_square*80;
                paramsCardView.addRule(RelativeLayout.CENTER_HORIZONTAL);
                paramsImg.addRule(RelativeLayout.CENTER_HORIZONTAL);
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                text_height = 0;

  convertView = getLayoutInflater().inflate(R.layout.row_list_social,null);
            convertView.setPaddingRelative(width_square*5, height_square*3,
                    width_square*5, height_square*3);

            ViewHolder holder = new ViewHolder();
            holder.imageView = convertView.findViewById(R.id.rowImage);
            holder.textView = convertView.findViewById(R.id.rowText);
            holder.cardView = convertView.findViewById(R.id.rowCard);
            convertView.setTag(holder);

            holder.textView.setTextColor(Color.BLACK);

            holder.cardView.setContentPadding(width_square*5, height_square*3,
                    width_square*5, height_square*3);
            holder.cardView.setCardBackgroundColor(Color.parseColor("#FFFFFF"));

            paramsTxt.addRule(RelativeLayout.BELOW, R.id.rowImage);
            paramsCardView.addRule(RelativeLayout.BELOW, R.id.rowText);

                //check social
                String social = checkClass(String.valueOf(getItem(position).getClass()));

                switch (social){
                    case "FACEBOOK":
                        new_fb_post = (FB_POST) getItem(position);
                        if(new_fb_post.full_picture != null && !new_fb_post.full_picture.equals("")){
                            paramsImg.height = width_square*50;
                            Glide.with(mContext)
                                    .load(new_fb_post.full_picture)
                                    .into(listImage);
                        } else {
                            paramsImg.height = width_square*1;
                        }
                        text3Lines(new_fb_post.message, listText);
                        break;
                    case "OFFICIAL":
                        new_of_post = (OF_POST) getItem(position);
                        if(new_of_post.full_picture != null && !new_of_post.full_picture.equals("")){

                            paramsImg.height = width_square*50;
                            Glide.with(mContext)
                                    .load(new_of_post.full_picture)
                                    .into(listImage);
                        } else {
                            paramsImg.height = width_square*5;
                        }
                        text3Lines(new_of_post.message, listText);
                        break;
                    default:
                        break;
                }
                listCard.setLayoutParams(paramsCardView);
                listImage.setLayoutParams(paramsImg);
                listText.setLayoutParams(paramsTxt);

                return convertView;
            }
        }
static class ViewHolder {
    TextView textView;
    ImageView imageView;
    CardView cardView;
}
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder;
    if (convertView == null) { 
   // if convertView is null 
       convertView = mInflater.inflate(R.layout.mylayout, parent, false); 
       holder = new ViewHolder(); 
       // initialize views
       convertView.setTag(holder); 
      // set tag on view
     }
    else { 
       holder = (ViewHolder) convertView.getTag(); 
       // if not null get tag // no need to initialize 
    } //update views here return convertView; 
}