Прокрутка списка не гладкая

У меня есть пользовательский вид списка, который отображает пользователей, и там фотографии, которые я получаю данные из API, который дает вывод JSON,

Моя проблема в том, что представление списка не прокручивается плавно, оно висит на секунду и прокручивает, оно повторяется до тех пор, пока мы не достигнем конца.

я думал, что это может быть мне, потому что я выполняю операцию, связанную с сетью, в потоке пользовательского интерфейса, но он продолжает делать это даже после завершения загрузки?

структура моего пользовательского ListView

 <TextView  style="@style/photo_post_text"
             android:id="@+id/photo_post_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="demotext"
           />


        <ImageView
            android:id="@+id/userimage"
           android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scaleType="fitXY"

            android:adjustViewBounds="true"
           android:src="@drawable/pi" 
           />

3 ответа

Решение

Используйте AsyncTask для загрузки ваших фотографий. Прокрутка не будет гладкой, пока вы выполняете такие задачи в потоке пользовательского интерфейса.

Взгляните на этот урок. Это поможет вам понять, что вам нужно реализовать без необходимости в дополнительных библиотеках. Также имейте в виду, что строки перерисовываются все время, пока вы прокручиваете, нет никакой реальной "загрузки" загрузки. Вы можете дополнительно рассмотреть кэш изображений, например, с помощью ConcurrentHashMap, в который вы можете поместить загруженные изображения.

Для Image Load быстро используйте эту библиотеку, это очень быстро для загрузки изображений https://github.com/bumptech/glide

Для гладкой прокрутки представления списка используйте strictMode .IT запись в методе onCreate().

protected void onCreate(Bundle savedInstanceState) {

    //StrictMode for smooth list scroll
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    /*----- 
        ListView 
        Custom Adapter set data....
    ------*/}

больше вещей, которые нужно добавить в метод onCreate()

listView.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCoun) {
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (scrollState != 0)
            listView.getAdapter()).isScrolling = true;
        else {
            adapter.isScrolling = false;
            adapter.notifyDataSetChanged();
        }
} });

добавить в класс адаптера

public static Boolean isScrolling = true;

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

  1. Использовать шаблон Holder и повторно использовать виды в getView() адаптера списка
  2. Использовать некоторую асинхронную библиотеку загрузки изображений для загрузки изображений, которые вы отображаете в ListView? Например, универсальный загрузчик изображений
  3. использование AsyncTask чтобы загрузить JSON из сети, вся обработка, связанная с сетью, выполняется в отдельном потоке.

Как только вы убедитесь, что вы охватили все вышесказанное, это должно работать хорошо.

Другие вопросы по тегам