2013-09-16 4 views
1

У меня есть RelativeLayout над моей ListView, и я ожидал TextView на этом макете, чтобы изменяться в зависимости от содержания первого видимого элемента в ListView. Поэтому я использую onScrollListener с моим списком:ListView не прокручивается плавно при попытке использовать SetText в OnScroll

@Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
      int visibleItemCount, int totalItemCount) { 
     if (adapter != null && adapter.getCount() > 0) { 
      Transaction data = (Transaction) adapter.getItem(firstVisbileItem); 
      Date date = data.getTransactionDate(); 
      date.setActualDate(date.getActualDate()); 
      String month = date.getMonthString(context); 
      String year = date.getYear() + ""; 
      tvLeftValue.setText(month); 
      tvRightValue.setText(year); 
     }  
    } 

Это просто очень странно, что, когда я использую это, список прокручивается очень медленно, но когда я попытался использовать setText("") как для TextView, список прокручивается плавно, как обычно. Эта проблема возникает, когда я тестирую на реальном устройстве (Galaxy S3), а не на эмуляторе Genymotion. Почему может возникнуть такая странная проблема? Есть ли возможное решение? Если кто-либо из вас когда-либо сталкивался с этим, пожалуйста, помогите мне и заблаговременно.

EDIT: На самом деле это также происходит в эмуляторе Genymotion, это просто быстрее, чем в реальных устройствах, поэтому я думал, что этого не произошло.

+0

у вас есть разрешение для этого или найти обход? – Dittimon

+1

@Dittimon на самом деле я не нашел ничего хорошего для этого, поэтому мне пришлось переключиться на использование [Amazing ListView] (https://code.google.com/p/android-amazing-listview/), чтобы заголовки разделов для моего списка. –

+0

Возможно, вы слишком часто устанавливаете этот способ и вызывают ненужные перерисовки. Возможно, это не сработает, но вы можете попробовать установить текст только в том случае, если он изменился. –

ответ

0

Метод onScorll вызывается очень часто. Вы делаете слишком много вещей в основном потоке. Попробуйте использовать рабочий поток для выполнения вычислительной работы и Handler для обновления интерфейса.

+0

Спасибо, я попытался использовать 'AsyncTask', но это не улучшило ситуацию. Проблема в том, что я пробовал комментировать все строки, которые отвечают за получение данных, и оставляя 'setText' со случайной строкой, но прокрутка все еще медленная. –

0

Это в конечном итоге решить подобную проблему у меня был Simple TextView.setText causes 40% CPU Usage

В основном, принятый ответ указывает, что установка текста заставляет обновление всей компоновки, поскольку TextView может быть изменен размер.

Решение исправляет размер вашего текста. Вы по-прежнему можете использовать ширину в качестве родителя соответствия в зависимости от вашего макета.

<TextView 
    android:layout_width="200dp" 
    android:layout_height="32dp" 
    android:ellipsize="end" /> 
+0

Также возможно использование относительной компоновки, где текстовое представление масштабируется в соответствии с двумя элементами, что предотвратит его сжатие. –

Смежные вопросы