首先,我的问题:
我的ListView
无法顺利滚动。
现在有一堆详细信息:
我目前正在我的应用中使用ArrayAdapter<CustomClass>
在ListView
的每个元素中显示文字和图片。我一直试图让ListView
滚动尽可能顺畅。但是一旦文本变长(大约40个字符),ListView
在滚动时就会开始出现断断续续的情况。
我同时显示大约9行。如果我使ListView
更小(大约6行),它可以正常工作。
我没有实施onScrollListener
而且我没有执行大型后台任务。
这是我目前正在使用的代码(仅限getView和Holder):
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//View row = convertView;
Holder holder = null;
if(convertView == null){
//Log.e("adapter", "convertview == null");
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
convertView = inflater.inflate(layoutResourceId, parent, false);
holder = new Holder();
holder.imgIcon = (ImageView)convertView.findViewById(R.id.icon);
holder.txtTitle = (TextView)convertView.findViewById(R.id.folder_name);
holder.txtInfo = (TextView)convertView.findViewById(R.id.info_text);
holder.pBar = (ProgressBar)convertView.findViewById(R.id.pBar);
convertView.setTag(holder);
}else{
holder = (Holder)convertView.getTag();
}
TrackInfo tInfo = data.get(position);
if(tInfo == null){
return convertView;
}
holder.imgIcon.setImageResource(icon);
holder.txtTitle.setText(tInfo.getTitle());
return convertView;
}
static class Holder
{
ImageView imgIcon;
TextView txtTitle;
TextView txtInfo;
ProgressBar pBar;
}
您可能会注意到有更多元素比我主动使用。这是因为我通常也会使用其他的,但我现在忽略了它们,因为我试图找出它为什么不能顺利滚动。
如前所述,它似乎是字符串tInfo.getTitle()
的长度。我无法改变字符串的长度,因为那些是我无法影响的文件名。
现在我的问题:
有什么问题?是要处理那么多数据吗?或者我的代码不好?
我正在测试Moto G(1.2GHz四核,more details here)。
感谢您的关注,祝您飞机愉快!
答案 0 :(得分:1)
我在marquee
中使用ListView
效果。我一直认为,只要我不打电话TextView.setSelected(true)
,这就不会导致任何进一步的处理。因此,我在android:ellipsize="marquee"
- 元素的布局文件中将TextView
作为ListView
的参数,而只选择了一个待突出显示的元素。
显然,我错了。
只要文本对于给定空间(大约40个字符)不太长,就没有问题。但是如果文本的大小超过给定的空间,则问题就开始了
我不确定究竟是什么问题,但在查看了TextView
的来源后,我发现在启用选框时还有很多工作要做:
TextView
在右侧淡出(而不是...
)Spannable
用作CharSequence
长话短说:
我非常顺利地删除了字幕和ListView
卷轴。