我正在創建音樂播放器應用程序。我的音樂庫活動是一個ViewPager
,包含四個頁面/片段(對應於專輯,藝術家,所有歌曲和播放列表)。三個片段只是GridView
's,最後一個是ListView
(全部歌曲片段)。首次啓動應用程序時,所有操作都能順利進行。但是,當用戶選擇要播放的歌曲(第一次)時,會在屏幕底部動態創建一個LinearLayout
(稱爲「正在播放的酒吧」),並顯示有關當前正在播放的歌曲的信息。在這一點上,滾動時,我的所有GridView
和我的ListView
開始落後相當嚴重。奇怪的是,我的ViewPager
似乎沒有遇到任何滯後,因爲Fragment
之間的切換與以前一樣無縫。當用戶退出播放器並繼續播放時(這種情況下「現在播放的條」已經可見),這個問題依然存在。Android:AdapterView在向LinearLayout動態添加視圖時滯後
在這一切中還有另一個令人困惑的因素。當用戶從庫中選擇專輯,藝術家或播放列表時,這創建了新的活動,該活動僅包含來自所述藝術家/專輯/播放列表的所有歌曲的ListView
。 「現在玩的酒吧」也加入到這項活動中,但不會導致任何放緩。這使我得出結論,問題與我的圖書館活動中的ViewPager
和/或Fragment
有關。
我已經完全被這個難住,非常感謝任何幫助。
這裏是我的圖書館活動的XML佈局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@id/library_view"
>
<include layout="@layout/sd_error"/>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.0"
/>
<include layout="@layout/now_playing_bar"/>
,這裏是用來創建 '正在播放欄' 代碼:
public static void updateNowPlaying(Activity a)
{
View nowPlayingView = a.findViewById(R.id.now_playing_bar);
if (nowPlayingView == null)
return;
try
{
if (true && MusicUtils.sService != null && MusicUtils.sService.getAudioId() != -1)
{
ImageView cover = (ImageView) nowPlayingView.findViewById(R.id.cover);
TextView title = (TextView) nowPlayingView.findViewById(R.id.title);
TextView artist = (TextView) nowPlayingView.findViewById(R.id.artist);
title.setText(MusicUtils.sService.getTrackName());
String artistName = MusicUtils.sService.getArtistName();
if (MediaStore.UNKNOWN_STRING.equals(artistName))
artistName = a.getString(R.string.unknown_artist_name);
artist.setText(artistName);
cover.setImageURI(ContentUris.withAppendedId(
sArtworkUri, sService.getAlbumId()));
if (cover.getDrawable() == null)
cover.setImageResource(R.drawable.no_album_cover);
nowPlayingView.setVisibility(View.VISIBLE);
nowPlayingView.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Context c = v.getContext();
c.startActivity(new Intent(c, PlayerActivity.class));
}
});
return;
}
}
catch (RemoteException ex) {}
nowPlayingView.setVisibility(View.GONE);
}