public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { var view = inflater.Inflate(Resource.Layout.activity_playlist, container, false); //var tracks_in_playlist_i_know_im_really_bad_at_naming = Core.VKontakte.Music.Playlist.GetById(playlist.Id); Activity.FindViewById <TextView>(Resource.Id.titlebar_title).Text = "Плейлист"; Handler handler = new Handler(Looper.MainLooper); var tracks = new List <AudioFile>(); adapter = new TrackAdapter(tracks, "false"); var plists_recycler = view.FindViewById <RecyclerView>(Resource.Id.tracksPlaylistView); var trackscount = view.FindViewById <TextView>(Resource.Id.countTracksPlaylistView); var title = view.FindViewById <TextView>(Resource.Id.namePlaylistView); var genre = view.FindViewById <TextView>(Resource.Id.genrePlaylistView); var author = view.FindViewById <TextView>(Resource.Id.artistPlaylistView); var year = view.FindViewById <TextView>(Resource.Id.yearPlaylistView); var cover = view.FindViewById <RoundedImageView>(Resource.Id.coverPlaylistView); adapter.ItemClick += AdapterOnItemClick; if (playlist.Cover != "playlist_placeholder") { cover.SetImageString(playlist.Cover, 50, 50); } if (playlist.Cover == "playlist_placeholder") { cover.SetImageResource(Resource.Drawable.playlist_placeholder); } title.Text = playlist.Name; genre.Text = playlist.Genre; author.Text = playlist.Artist; year.Text = playlist.Year; plists_recycler.SetAdapter(adapter); plists_recycler.Clickable = true; plists_recycler.SetLayoutManager(new LinearLayoutManager(Application.Context, LinearLayoutManager.Vertical, false)); var actualtracks = Task.Run(async() => { return(await Core.VKontakte.Music.Playlist.GetTracks(playlist.Id, playlist.OwnerId, playlist.AccessKey)); }); try { tracks = MusicService.ConvertToAudioFile(actualtracks.Result); this.playlist.TracksFiles = tracks; adapter.AddItems(tracks); adapter.ItemClick += AdapterOnItemClick; if (playlist.Cover != "playlist_placeholder") { cover.SetImageString(playlist.Cover, 50, 50); } if (playlist.Cover == "playlist_placeholder") { cover.SetImageResource(Resource.Drawable.playlist_placeholder); } trackscount.Text = $"{actualtracks.Result.Count} треков"; title.Text = playlist.Name; genre.Text = playlist.Genre; author.Text = playlist.Artist; year.Text = playlist.Year; plists_recycler.SetAdapter(adapter); plists_recycler.Clickable = true; plists_recycler.SetLayoutManager(new LinearLayoutManager(Application.Context, LinearLayoutManager.Vertical, false)); } catch (System.Exception e) { Toast.MakeText(Application.Context, $"Произошла ошибка. Видимо, ВКонтакте не дает нам доступ к этому плейлисту.", ToastLength.Long).Show(); view = inflater.Inflate(Resource.Layout.errorActivity, container, false); } return(view); }
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { var view = inflater.Inflate(Resource.Layout.activity_tracks, container, false); List <AudioFile> tracks = new List <AudioFile>(); Tracks = tracks; adapter = new TrackAdapter(tracks); List <PlaylistFile> plists = new List <PlaylistFile>(); Playlists = plists; pAdapter = new PlaylistAdapter(plists); var tracksView = view.FindViewById <RecyclerView>(Resource.Id.list_tracks); var progressBar = view.FindViewById <ProgressBar>(Resource.Id.progressBar_tracks); var playlistsView = view.FindViewById <RecyclerView>(Resource.Id.list_plists); var playlistsProgressBar = view.FindViewById <ProgressBar>(Resource.Id.progressBar_library_plists); Handler handler = new Handler(Looper.MainLooper); adapter.ItemClick += AdapterOnItemClick; pAdapter.ItemClick += PlaylistOnItemClick; tracksView.SetAdapter(adapter); tracksView.SetLayoutManager(new LinearLayoutManager(Application.Context, LinearLayoutManager.Vertical, false)); RegisterForContextMenu(tracksView); tracksView.Clickable = true; playlistsView.SetAdapter(pAdapter); playlistsView.SetLayoutManager(new LinearLayoutManager(Application.Context, LinearLayoutManager.Horizontal, false)); playlistsView.Clickable = true; var scrollListener = new Listeners.OnScrollToBottomListener(() => { //if (!HasLoading) return; var task = Task.Run(() => { handler.Post(new Runnable(() => { progressBar.Visibility = ViewStates.Visible; })); try { tracks = MusicService.GetMusicLibrary(15, adapter.ItemCount); var i = 1 + 1; //Без этого нихуя не работает. Fooxboy.MusicX.Core.Log.Debug(i.ToString()); } catch (Exception e) { Toast.MakeText(Application.Context, $"Произошла ошибка: {e.ToString()}", ToastLength.Long).Show(); } }); bool end = false; task.ContinueWith((t) => { while (tracks.Count == 0) { System.Threading.Thread.Sleep(300); } HasLoading = !(tracks.Count < 15); handler.Post(new Runnable(() => { var count = adapter.ItemCount; adapter.AddItems(tracks); TracksInLibrary.AddRange(tracks); adapter.NotifyItemRangeChanged(count, tracks.Count); progressBar.Visibility = ViewStates.Invisible; end = true; })); }); var a = task.ConfigureAwait(false); while (!end) { System.Threading.Thread.Sleep(300); } }); tracksView.AddOnScrollListener(scrollListener); var plistsScrollListener = new Listeners.OnScrollToBottomListener(() => { if (!HasLoading) { return; } var task = Task.Run(() => { handler.Post(new Runnable(() => { playlistsProgressBar.Visibility = ViewStates.Visible; })); try { //tracks = MusicService.GetMusicLibrary(15, adapter.ItemCount); var vkplists = Core.VKontakte.Music.Library.PlaylistsSync(15, pAdapter.ItemCount); plists = PlaylistsService.CovertToPlaylistFiles(vkplists); var i = 1 + 1; //Без этого нихуя не работает. Fooxboy.MusicX.Core.Log.Debug(i.ToString()); } catch (Exception e) { Toast.MakeText(Application.Context, $"Произошла ошибка: {e.ToString()}", ToastLength.Long).Show(); } }); bool end = false; task.ContinueWith((t) => { while (plists.Count == 0) { System.Threading.Thread.Sleep(300); } HasLoading = !(plists.Count < 15); handler.Post(new Runnable(() => { var count = pAdapter.ItemCount; pAdapter.AddItems(plists); PlaylistsInLibrary.AddRange(plists); pAdapter.NotifyItemRangeChanged(count, plists.Count); playlistsProgressBar.Visibility = ViewStates.Invisible; end = true; })); }); var a = task.ConfigureAwait(false); while (!end) { System.Threading.Thread.Sleep(300); } }); playlistsView.AddOnScrollListener(plistsScrollListener); if (pAdapter.ItemCount == 0) { plistsScrollListener.InvokeCallback(); } if (adapter.ItemCount == 0) { scrollListener.InvokeCallback(); } return(view); }