Android 音乐播放器--歌曲列表的显示

歌曲列表是靠ListView实现的,在这里我给每首歌曲定义了一个类,并自定义了一个ArrayAdapter

添加Song类

Song类中包含了 标题 专辑 专辑图片信息等

 1 public class Song {
 2     String title;
 3     String artist;
 4     String album;
 5     String Data;
 6     String albumn_art;
 7
 8     public Song(String title, String artist, String album) {
 9         this.title = title;
10         this.artist = artist;
11         this.album = album;
12     }
13     public Song(){
14
15     }
16
17     public String getAlbumn_art() {
18         return albumn_art;
19     }
20
21     public void setAlbumn_art(String albumn_art) {
22         this.albumn_art = albumn_art;
23     }
24
25     public String getData() {
26         return Data;
27     }
28
29     public void setData(String data) {
30         Data = data;
31     }
32
33     public String getTitle() {
34         return title;
35     }
36
37     public void setTitle(String title) {
38         this.title = title;
39     }
40
41     public String getArtist() {
42         return artist;
43     }
44
45     public void setArtist(String artist) {
46         this.artist = artist;
47     }
48
49     public String getAlbum() {
50         return album;
51     }
52
53     public void setAlbum(String album) {
54         this.album = album;
55     }
56 }

用于显示歌曲列表每一项的布局文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="horizontal"
 4     android:layout_width="match_parent"
 5     android:layout_marginRight="10dp"
 6     android:layout_height="60dp">
 7     <!-- 歌曲的序列号 -->
 8     <TextView
 9         android:id="@+id/song_sort"
10         android:layout_width="wrap_content"
11         android:minWidth="45dp"
12         android:maxWidth="45dp"
13         android:layout_height="60dp"
14         android:text="1"
15         android:maxLines="1"
16         android:layout_gravity="center"
17         android:gravity="center"
18         android:textSize="22dp"
19         android:layout_weight="1"/>
20     <LinearLayout
21         android:layout_width="0dp"
22         android:layout_height="60dp"
23         android:layout_weight="20"
24         android:orientation="vertical"
25         >
26         <!-- 标题 -->
27         <TextView
28             android:id="@+id/song_title"
29             android:layout_weight="5"
30             android:layout_width="wrap_content"
31             android:layout_height="0dp"
32             android:maxLines="1"
33             android:gravity="center_vertical"
34             android:textSize="30dp"
35             android:textColor="#333333"
36             android:text="heihei"/>
37         <!-- 专辑与歌手信息 -->
38         <TextView
39             android:id="@+id/song_info"
40             android:layout_weight="3"
41             android:gravity="center_vertical"
42             android:maxLines="1"
43             android:layout_gravity="center_vertical"
44             android:layout_width="wrap_content"
45             android:layout_height="0dp"
46             android:textSize="14dp"
47             android:text="hahfdgdfhfghhfga"/>
48
49         </LinearLayout>
50
51 </LinearLayout>

SongAdapter

 1 package com.example.agmcs.musicplayer;
 2
 3 import android.content.Context;
 4 import android.content.Intent;
 5 import android.view.LayoutInflater;
 6 import android.view.View;
 7 import android.view.ViewGroup;
 8 import android.widget.ArrayAdapter;
 9 import android.widget.TextView;
10
11 import org.w3c.dom.Text;
12
13 import java.util.List;
14
15
16 public class SongAdapter extends ArrayAdapter<Song> {
17     private int resId;
18
19     public SongAdapter(Context context, int resource, List<Song> objects) {
20         super(context, resource, objects);
21         this.resId = resource;
22     }
23
24     @Override
25     public View getView(int position, View convertView, ViewGroup parent) {
26         Song song = getItem(position);
27         View view;
28         ViewHolder holder;
29         if(convertView == null){
30             view = LayoutInflater.from(getContext()).inflate(resId,null);
31             holder = new ViewHolder();
32             holder.info = (TextView)view.findViewById(R.id.song_info);
33             holder.title = (TextView)view.findViewById(R.id.song_title);
34             holder.sort = (TextView)view.findViewById(R.id.song_sort);
35             view.setTag(holder);
36         }else{
37             view = convertView;
38             holder = (ViewHolder)view.getTag();
39         }
40         holder.title.setText(song.getTitle());
41         holder.info.setText(song.getArtist() + " - " + song.getAlbum());
42         holder.sort.setText(String.valueOf(position+1));
43         return view;
44     }
45
46     //优化ArrayAdapter
47     class ViewHolder{
48         TextView title;
49         TextView info;
50         TextView sort;
51     }
52 }

ListView的初始化

listview 是在Fragment中显示的

 1 package com.example.agmcs.musicplayer;
 2
 3 import android.app.Activity;
 4 import android.app.ListFragment;
 5 import android.content.BroadcastReceiver;
 6 import android.content.Context;
 7 import android.content.Intent;
 8 import android.content.IntentFilter;
 9 import android.net.Uri;
10 import android.os.Bundle;
11 import android.app.Fragment;
12 import android.util.Log;
13 import android.view.LayoutInflater;
14 import android.view.View;
15 import android.view.ViewGroup;
16 import android.widget.AdapterView;
17 import android.widget.ListView;
18 import android.widget.Toast;
19
20 import java.util.ArrayList;
21 import java.util.List;
22
23
24 /**
25  * A simple {@link Fragment} subclass.
26  * Activities that contain this fragment must implement the
27  * {@link MusicListFrag.OnFragmentInteractionListener} interface
28  * to handle interaction events.
29  * Use the {@link MusicListFrag#newInstance} factory method to
30  * create an instance of this fragment.
31  */
32 public class MusicListFrag extends Fragment implements AdapterView.OnItemClickListener {
33     private ListView list;
34     private SongAdapter adapter;
35
36
37     @Override
38     public View onCreateView(LayoutInflater inflater, ViewGroup container,
39                              Bundle savedInstanceState) {
40         // Inflate the layout for this fragment
41         View view = inflater.inflate(R.layout.fragment_music_list, container, false);
42
43         list = (ListView)view.findViewById(R.id.music_listview);
44         return view;
45     }
46
47     @Override
48     public void onActivityCreated(Bundle savedInstanceState) {
49         super.onActivityCreated(savedInstanceState);
50         adapter = new SongAdapter(getActivity(),R.layout.music_item,PlayerServer.songList);
51         list.setAdapter(adapter);
52         list.setOnItemClickListener(this);
53     }
54
55     @Override
56     public void onResume() {
57         super.onResume();
58         IntentFilter intentFilter = new IntentFilter(PlayerServer.updateBroadcast);
59         UpdateReceiver receiver = new UpdateReceiver();
60         getActivity().registerReceiver(receiver,intentFilter);
61     }
62
63     public class UpdateReceiver extends BroadcastReceiver{
64         @Override
65         //接受Service发出的刷新完毕广播后,刷新下Listview
66         //这里不能用adapter.notifyDateChange 因为songList完全是另一个内存
67         public void onReceive(Context context, Intent intent) {
68             adapter = new SongAdapter(getActivity(),R.layout.music_item,PlayerServer.songList);
69             list.setAdapter(adapter);
70             Log.d("hi","???");
71         }
72     }
73
74     @Override
75     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
76         //当点击时播放这首歌
77         Intent i = new Intent(getActivity(), PlayerServer.class);
78         i.putExtra("MSG",Constant.PlayerMsg.PLAY_MSG);
79         i.putExtra("position",position);
80         getActivity().startService(i);
81     }
82 }
时间: 2024-10-08 08:21:37

Android 音乐播放器--歌曲列表的显示的相关文章

Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)

效果: 问题:可拖动进度条随进度条移动时,会致使音乐卡顿(待解决) xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:l

自编Win8风格Android音乐播放器应用源码(单机版)

用闲暇的两天时间,研究编写了一个类Win8风格的android音乐播放器,实现了大部分基本功能.下面看具体描述: 基本实现功能:注意事项:Android系统版本须在2.2以上,保证手机安装有SD卡(部分图标来至qq音乐和百度音乐)界面组成:欢迎界面:淡入,随机图片 由于代码不少,所以在这里贴出来也不太现实,嗯,那就上链结吧,请各位到源码天堂网站上下载吧: http://code.662p.com/view/4733.html 主界面:4个tab标签页,4宫格: --  歌曲列表界面:从sd卡中扫

android音乐播放器开发 SweetMusicPlayer 智能负载直插式歌词

在一份书面的使用MediaPlayer播放音乐, http://blog.csdn.net/huweigoodboy/article/details/39862773.假设没有本地歌词怎么办?如今来将一下载入在线歌词.好了,还是用那张图. 在实现这个功能的时候,lz尝试过baidu api,歌词迷api,后来选用了歌词迷api.尽管还是资源不全.并且还有非常多错误. 特别头疼的是有时候歌词竟然不分行.解析起来简直难受. 歌词迷api歌词查询地址:http://geci.me/api/lyric/

android音乐播放器开发教程

android音乐播放器开发教程 android音乐播放器开发教程,布布扣,bubuko.com

[Android]音乐播放器总结

1. MediaPlayer要播放的文件主要包括3个来源:a. 用户在应用中事先自带的resource资源例如:mp = MediaPlayer.create(this, R.raw.test);b. 存储在SD卡或其他文件路径下的媒体文件例如:mp.setDataSource("/sdcard/test.mp3");c. 网络上的媒体文件例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3"

android音乐播放器源码

最近研究android音乐播放器,弄了一个,还可以,可以实现播放.暂停.拖动进度等功能. 源码地址:http://download.csdn.net/detail/a358763471/8728855

Android音乐播放器源码(歌词.均衡器.收藏.qq5.0菜单.通知)

Android音乐播放器(歌词.均衡器.收藏.qq5.0菜单.通知) 一款Android音乐播放器源码,基本功能都实现了 qq5.0菜单(歌词.均衡器.收藏.qq5.0菜单.通知) 只有向右滑动出现,菜单键和指定按钮都还没有添加. 下载地址:http://www.devstore.cn/code/info/1144.html 运行截图:     热门源码下载: 高仿京东商城 Android快速开发不可或缺的11个工具类 Android快速开发框架LoonAndroid Android应用源码比较

如何写一个正经的Android音乐播放器 一

以前写过很多次音乐播放器,但是总有一些问题出现,例如: 1,音乐长时间播放问题(即便是放在service中去播放,依然会被杀死): 2,音乐的播放进度如何掌握?(如何利用mediaplayer.getCurrentPosition()来有效的通知界面变更进度?): 3,在我以往的经验中,音乐播放完毕下一曲时候,经常出现当前音乐播放还差几秒钟的时候就下一曲了的情况. 从网上找到教程中,通常都是一个播放器的demo,简单的直接把MediaPlayer放在了一个Activity中去操作,稍有良心的教程

android音乐播放器的竞品分析

迄今为止最长的一篇博客,各位看官笑纳~~ 本次分析基于android平台,选取了几款我体验过的播放器进行比较分析.主要分为两类,一类是大而全的,功能全面,可满足用户管理歌曲.导入导出歌单等多方面需求,不仅仅是听歌,另一类是小而简的,操作简单,让用户专注听歌. 1. QQ音乐          版本:5.2.1.15 特点:这款产品在PC端就有庞大的用户基础,有一定的用户粘性,手机端是web端的延伸.其性能和体验都很不错,1. 曲库强大,可选不同播放音效和音质:2. 独具Qplay功能,可将手机里