刚入门学android,试着做了一个音乐播放器,目前想在歌曲列表界面的item上增加一个小图标,用来标识当前音乐是否正在播放(很多播放器都有这个功能),歌曲列表的list是通过继承BaseAdapter实现的, 现在遇到的问题是从播放界面返回到列表界面时,小图标不会刷新.
请教各位大侠有啥好的方法将正在播放的音乐的索引值传递到列表的activity这边来?同时如何去重绘播放列表的listview?
谢谢!
请教各位大侠有啥好的方法将正在播放的音乐的索引值传递到列表的activity这边来?同时如何去重绘播放列表的listview?
谢谢!
adapter.notifyDataSetChanged();//刷新适配器;
所以你要是想刷新,把上面的代码写在合适的地方就ok了
我使用了broadcast来通知更新界面,可以达到更新小图标的问题,但还有个问题是:
从播放界面返回到列表时,每次都是先将歌曲名称等这些list item信息显示完全后,才看到那个小图标从之前的位置跳转到最新的位置显示,有什么办法能让图标跟随list信息一起刷新呢? 下面是我每一个listitem的布局代码,是不是这有什么问题?<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/plst_item"
android:layout_width="fill_parent"
android:layout_height="@dimen/listWidth">
<ImageView
android:id="@+id/img_default_album"
android:layout_width="@dimen/imgBtnAlbumWidth"
android:layout_height="@dimen/imgBtnAlbumWidth"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:src="@drawable/def_album"
android:padding="@dimen/imgPadding"/> <ImageView
android:id="@+id/img_playing_icon"
android:layout_width="@dimen/playingIconWidth"
android:layout_height="@dimen/playingIconWidth"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:background="@drawable/playing_icon"
android:visibility="invisible"/>
<TextView
android:id="@+id/txt_song_name"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="@dimen/doubleItemWidth"
android:layout_toRightOf="@id/img_default_album"
android:layout_toLeftOf="@id/img_playing_icon"
android:textSize="@dimen/fontSizeSongName"
android:gravity="center_vertical"
android:ellipsize="marquee"
android:padding="@dimen/textPadding"
android:text="song namesong namesong namesong namesong name"/>
<TextView
android:id="@+id/txt_artist_name"
android:layout_width="match_parent"
android:layout_height="@dimen/doubleItemWidth"
android:layout_below="@id/txt_song_name"
android:layout_toLeftOf="@id/img_playing_icon"
android:layout_toRightOf="@id/img_default_album"
android:gravity="center_vertical"
android:singleLine="true"
android:ellipsize="marquee"
android:padding="@dimen/textPadding"
android:text="artist namehfgdfgartist namehfgdfg123424124" />
</RelativeLayout>
我将onResume方法做的操作都删掉了还这样,是不是我刷新这个图标的地方有问题呢?我是写在getView函数里的
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
convertView = LayoutInflater.from(musicContext).inflate(R.layout.plstitem, null);
musicCursor.moveToPosition(position);
TextView txtSongName = (TextView)convertView.findViewById(R.id.txt_song_name);
TextView txtArtistName = (TextView)convertView.findViewById(R.id.txt_artist_name);
ImageView imgAlbum = (ImageView)convertView.findViewById(R.id.img_default_album);
ImageView imgPlayingIcon = (ImageView)convertView.findViewById(R.id.img_playing_icon);
txtSongName.setText(musicCursor.getString(musicCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)));
//txtSongName.setText(musicCursor.getString(0));
txtArtistName.setText(musicCursor.getString(2));
imgAlbum.setImageResource(R.drawable.def_album);
imgPlayingIcon.setImageResource(R.drawable.playing_icon);
if(playingId == position){
imgPlayingIcon.setVisibility(View.VISIBLE); //显示正在播放的图标
}
return convertView;
}
if (convertView == null) {
convertView = LayoutInflater.from(musicContext).inflate(R.layout.plstitem, null);
}
只有convertView为空的时候才会做解析操作,不然每次解析很费时的,不确定是不是这点有影响,你试下
找到原因了,是因为我在onPause方法中将broadcastReceiver给取消注册了,因为之前看关于broadcast方面的知识时,都说要在onPause方法中取消注册,在onResume中重新注册,我现在将取消注册移到Destroy方法中去了,请问我这样做是否可行?