2014-02-21 5 views
1

Прежде всего, моя проблема:
Мой ListView woun't прокрутки плавно.Эффективное ArrayAdapter

Теперь куча деталей:

настоящее время я использую в моем приложении к ArrayAdapter<CustomClass> для отображения текста и изображений и в каждом элементе ListView. Я пытаюсь сделать ListView прокруткой максимально гладкой. Но как только текст становится длиннее (около 40 символов), ListView начинает заикаться при прокрутке.
Я показываю около 9 строк в то же время. Если я делаю ListView меньше (около 6 строк), он отлично работает.
Я не внедряю onScrollListener, и у меня нет больших фоновых задач.

Это код, который я сейчас использую (только GetView и держатель):

@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 (Quadro Core 1.2GHz, more details here).


Благодарим за внимание, добро пожаловать!

+1

Используйте Traceview и определите, где ваша проблема. – CommonsWare

+0

Хорошо, спасибо. Это похоже на то, что мне нужно в первую очередь, но выглядит довольно информативно. – MalaKa

ответ

1

Я работал с marquee эффектом в ListView. Я всегда думал, что до тех пор, пока я не звоню TextView.setSelected(true), это не приведет к дальнейшей обработке. Поэтому у меня был android:ellipsize="marquee" в качестве параметра для моего TextView в макете файла ListView -элемент, в то время как был выбран только один выделенный элемент.

Видимо, я был неправ.

Пока текст не слишком длинный для заданного пространства (около 40 символов), проблем не было. Но если размер текста превысил заданное пространство, возникли проблемы.
Я не уверен, что именно эта проблема, но после того, как заглянуть в источник TextView, я узнал, что есть намного больше, чтобы сделать, когда шатровым включено:

  • TextView погаснет, на правой стороне (вместо ...)
  • Spannable используются как CharSequence
  • Это должно быть проверено, если шатер должен начать
  • ...


Так Короче говоря:

Я удалил шатра и ListView свитки очень гладко.