gpt4 book ai didi

Android:动态添加 View 到 LinearLayout 时 AdapterView 滞后

转载 作者:行者123 更新时间:2023-11-30 03:26:48 27 4
gpt4 key购买 nike

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

所有这一切还有另一个相当困惑的因素。当用户从库中选择专辑、艺术家或播放列表时,这将创建一个新 Activity ,它只是一个 ListView,其中包含所述艺术家/专辑/播放列表中的所有歌曲。 “正在播放栏”也被添加到此 Activity 中,但它不会导致任何减速。这使我得出结论,问题与我的库 Activity 中的 ViewPager 和/或 Fragment 有关。

我完全被这个难住了,非常感谢任何帮助。

这是我的图书馆 Activity 的 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);
}

最佳答案

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

关于Android:动态添加 View 到 LinearLayout 时 AdapterView 滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102246/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com