Заполнение ScrollView множеством элементов занимает слишком много времени - PullRequest
0 голосов
/ 04 октября 2018

В настоящее время я работаю над простым mp3-плеером в качестве приложения на моем телефоне Android.Я просматриваю все файлы на моей SD-карте и во внутренней памяти, чтобы найти все с расширением: «.mp3».

Просто и отлично работает.

Затем я заполняю список со всеми полученными названиями песен, и при нажатии они начинают играть.Работает нормально, НО

Я сейчас попробовал это на моем личном телефоне с 700+ песнями на нем, и списки были сделаны менее чем за секунду, но теперь списки должны заполнить ScrollView в цикле foreach с помощьюРезультаты.И это занимает вечность:

 private void PopulateScrollView(List<string> content)
        {
            LinearLayout root = (LinearLayout)FindViewById(Resource.Id.scrollview);
            mp3 = new List<MP3object>();

            foreach (string obj in content)
            {
                WriteMetaDataToFileList(obj);

                TextView txt = new TextView(this);
                reader.SetDataSource(obj);
                txt.Text = reader.ExtractMetadata(MediaMetadataRetriever.MetadataKeyTitle);
                txt.TextSize = 20;
                txt.Gravity = Android.Views.GravityFlags.Center;

                root.AddView(txt);

                txt.Click += delegate
                {
                    PlayMusic(Android.Net.Uri.Parse(obj));
                    firstStart = false;
                    txt_CurrentSong.Text = CurrentActiveSongUri.ToString();
                    btn_StartOrPause.Text = Resources.GetString(Resource.String.Pause);
                };
            }
        }

Итак, мне интересно.Что я делаю иначе, чем мой "нормальный" музыкальный проигрыватель на моем телефоне?Я открываю его, и все песни уже заполнены в ScrollView, почти НЕТ времени ожидания.По-видимому, проходить цикл 700+ раз, чтобы заполнить его песнями, - слишком много работы, но это нужно сделать, верно?Или я вижу здесь что-то не так?Некоторая помощь будет УДИВИТЕЛЬНОЙ!:)

Спасибо.

*** РЕДАКТИРОВАТЬ:

Кроме того, я отметил, что каждое приложение, которое перечисляет мои файлы на моем телефоне, чертовски быстро, даже 1000+файлы в виде прокрутки.Понятно, что мой путь - это неправильный способ заполнить скролл-просмотр статическими элементами с моего телефона.Есть ли другие способы сделать это?спасибо :)

1 Ответ

0 голосов
/ 04 октября 2018

Проблема, с которой вы столкнулись, состоит в том, что ScrollView не предназначен для использования с длинными списками данных.Вы заставляете Android создавать, размещать и поддерживать огромное количество просмотров.Вместо этого вы должны заглянуть в RecyclerView .

RecyclerView предназначен для обработки длинных списков элементов данных, например, вашего сценария использования mp3-файлов.Он обрабатывает большой объем данных, создавая только элементы, необходимые для отображения элементов, которые в данный момент находятся на экране (плюс пара дополнительных элементов, которые помогают с плавной прокруткой).Это значительно снижает нагрузку на память и процессор в системе и учитывает скорость отклика, которую вы видите в других приложениях.Эти другие приложения, скорее всего, используют RecyclerView или аналогичный шаблон.

Я рекомендую прочитать руководство Google по RecyclerView (ссылка выше, но также здесь для удобства), чтобы узнать, как его использовать.,Я бы также рекомендовал использовать встроенную функцию выбора элементов списка в RecyclerView для обработки пользовательских нажатий вместо события TextView.click.Оба могут работать, но функциональность выбора, вероятно, будет более удобной, поскольку RecyclerView обрабатывает сложные детали для вас.

...