2013-08-07 57 views
1

我正在創建音樂播放器應用程序。我的音樂庫活動是一個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); 
} 

回答

1

好了,原來的原因是因爲我有android:layout_height="match_parent"android:layout_weight="1.0"。顯然,如果你正在設置重量,你應該使用android:layout_height="0dp"以獲得更好的性能。我完全不知道爲什麼會出現這種情況,但它解決了這個問題。

相關問題