2

我目前正在创建一个音乐播放器应用程序。我的音乐库活动ViewPager有四个页面/片段(对应于专辑、艺术家、所有歌曲和播放列表)。其中三个片段是just GridView,最后一个是a ListView(所有歌曲片段)。当应用程序第一次启动时,一切都运行得非常顺利。但是,当用户(第一次)选择要播放的歌曲时,LinearLayout会在屏幕底部动态创建一个(称为“正在播放栏”),其中包含有关当前播放歌曲的信息。在这一点上,我所有的GridView's 和 myListView在滚动时都开始严重滞后。奇怪的是,我ViewPager似乎没有在之间切换时遇到任何滞后Fragment's 和以前一样无缝。当用户退出播放器然后恢复播放器时,此问题仍然存在(在这种情况下,“正在播放栏”已经可见)。

在这一切中还有另一个相当令人困惑的因素。当用户从库中选择专辑、艺术家或播放列表时,这将创建一个新活动,该活动仅ListView包含来自所述艺术家/专辑/播放列表的所有歌曲。“正在播放栏”也添加到此活动中,但不会导致任何减速。这使我得出结论,该问题与我的图书馆活动中的ViewPagerand/or相关。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);
}
4

1 回答 1

1

好的,事实证明滞后的原因是因为我有android:layout_height="match_parent"android:layout_weight="1.0"。显然,如果您这样设置权重,则应该使用android:layout_height="0dp"以获得更好的性能。我完全不知道为什么会这样,但它解决了问题。

于 2013-08-09T08:08:54.900 回答