Java 从下到上滚动ListView滞后
我的listview有点滞后 因此,当我向下滚动listview时,性能非常好,但当我向上滚动时,发现我的行时会出现延迟 我正在使用glide查看图像 适配器中的text3Lines方法在我的textView中设置了三行文本。 适配器中的checkClass方法包含一个简单的if条件 在我的OnCreate方法中: 在MyAdapter类中: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
提前感谢您的帮助。结果相同,因为您没有正确使用视图固定器。每次调用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;
}