有效的ArrayAdapter

时间:2014-02-21 00:39:10

标签: android android-listview

首先,我的问题:
我的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)。


感谢您的关注,祝您飞机愉快!

1 个答案:

答案 0 :(得分:1)

我在marquee中使用ListView效果。我一直认为,只要我不打电话TextView.setSelected(true),这就不会导致任何进一步的处理。因此,我在android:ellipsize="marquee" - 元素的布局文件中将TextView作为ListView的参数,而只选择了一个待突出显示的元素。

显然,我错了。

只要文本对于给定空间(大约40个字符)不太长,就没有问题。但是如果文本的大小超过给定的空间,则问题就开始了 我不确定究竟是什么问题,但在查看了TextView的来源后,我发现在启用选框时还有很多工作要做:

  • TextView在右侧淡出(而不是...
  • Spannable用作CharSequence
  • 需要检查选框是否应该开始
  • ...


长话短说:

我非常顺利地删除了字幕和ListView卷轴。