从上篇可以获得音乐的数据集合list,然后根据ListView.setAdapter(adapter)可以把数据放进适配器;
由此可知重点在adapter
ListViewAdapter.java
public class ListViewAdapter extends BaseAdapter{
MediaPlayer mp=new MediaPlayer();
private List<MusicData> mFileList;
private LayoutInflater mLayoutInflater;
private Boolean playstatus=true;
private int flag = 0;
public ListViewAdapter(Context context, List<MusicData> FileList)
{
mFileList = FileList;
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mFileList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder ;
if (convertView == null)
{
holder=new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.songstyle, null);
holder.iv=(ImageView)convertView.findViewById(R.id.play);
holder.displayname = (TextView) convertView.findViewById(R.id.displayname);
holder.artist = (TextView) convertView.findViewById(R.id.artist);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
holder.displayname.setText(mFileList.get(position).mMusicName);
holder.artist.setText(mFileList.get(position).mMusicAritst);
return convertView;
}
class ViewHolder{
ImageView iv=null;
TextView displayname=null;
TextView artist=null;
}
}
songstyle.xml
ps:这是listView的每一个布局显示样式
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.song.MainActivity"
tools:ignore="MergeRootFrame"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="55dp"
android:orientation="horizontal"
>
<View
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0.5"
/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="10.8"
android:orientation="vertical"
>
<TextView
android:id="@+id/displayname"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.7"
android:textColor="@android:color/background_light"
android:gravity="center_vertical"
android:textSize="14dp"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.4"
>
<Button
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="2"
android:background="#9966FF"
android:text="HQ"
android:textColor="#ffffff"
android:textSize="12dp"
/>
<View
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0.25"
/>
<Button
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="2"
android:background="#9966FF"
android:text="MV"
android:textColor="#ffffff"
android:textSize="12dp"
/>
<View
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0.25"
/>
<TextView
android:id="@+id/artist"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="16"
android:gravity="center_vertical"
android:textSize="12dp"
android:textColor="#ffffff"
/>
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.25"
/>
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0.3"
/>
<View
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0.3"
/>
</LinearLayout>
</LinearLayout>
MusicData.java
public class MusicData implements Parcelable{
public final static String KEY_MUSIC_DATA = "MusicData";
private final static String KEY_MUSIC_NAME = "MusicName";
private final static String KEY_MUSIC_TIME = "MusicTime";
private final static String KEY_MUSIC_PATH = "MusicPath";
private final static String KEY_MUSIC_ARITST = "MusicAritst";
public String mMusicName;
public int mMusicTime;
public String mMusicPath;
public String mMusicAritst;
public MusicData()
{
mMusicName = "";
mMusicTime = 0;
mMusicPath = "";
mMusicAritst = "";
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
Bundle mBundle=new Bundle();
mBundle.putString(KEY_MUSIC_NAME, mMusicName);
mBundle.putInt(KEY_MUSIC_TIME, mMusicTime);
mBundle.putString(KEY_MUSIC_PATH, mMusicPath);
mBundle.putString(KEY_MUSIC_ARITST, mMusicAritst);
dest.writeBundle(mBundle);
}
public static final Parcelable.Creator<MusicData> CREATOR = new Parcelable.Creator<MusicData>()
{
@Override
public MusicData createFromParcel(Parcel source) {
// TODO Auto-generated method stub
MusicData Data = new MusicData();
Bundle mBundle=new Bundle();
mBundle = source.readBundle();
Data.mMusicName = mBundle.getString(KEY_MUSIC_NAME);
Data.mMusicTime = mBundle.getInt(KEY_MUSIC_TIME);
Data.mMusicPath = mBundle.getString(KEY_MUSIC_PATH);
Data.mMusicAritst = mBundle.getString(KEY_MUSIC_ARITST);
return Data;
}
@Override
public MusicData[] newArray(int size) {
// TODO Auto-generated method stub
return new MusicData[size];
}
};
}
SongsActivity.java
public class SongsActivity extends Activity {
private List<MusicData> list=new ArrayList<MusicData>();
private MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_songs);
final ListView listview=(ListView)findViewById(R.id.listView);
String[] projection = new String[]{MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ARTIST};
Cursor cursor=getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
if (cursor != null)
{
cursor.moveToFirst();
int colNameIndex = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int colTimeIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
int colPathIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
/**
* 直接截取字符串 ,吧作家名取出来
*ypc20150708
*by1656612697@qq.com
*/
//int colArtistIndex = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int fileNum = cursor.getCount();
for(int counter = 0; counter < fileNum; counter++){
MusicData data = new MusicData();
data.mMusicName = cursor.getString(colNameIndex);
//System.out.println(data.mMusicName);
data.mMusicTime = cursor.getInt(colTimeIndex);
//System.out.println(data.mMusicTime);
data.mMusicPath = cursor.getString(colPathIndex);
//System.out.println(data.mMusicPath);
data.mMusicAritst=data.mMusicName.split("-")[0];
//data.mMusicAritst = cursor.getString(colArtistIndex);
//System.out.println(data.mMusicAritst);
list.add(data);
cursor.moveToNext();
}
cursor.close();
}
final ListViewAdapter myadapter=new ListViewAdapter(SongsActivity.this, list);
listview.setAdapter(myadapter);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
Intent intent=new Intent(SongsActivity.this,PlayActivity.class);
intent.putExtra("songName",list.get(position).mMusicName);
intent.putExtra("playName",list.get(position).mMusicAritst);
intent.putExtra("url", list.get(position).mMusicPath);
intent.putExtra("duration", list.get(position).mMusicTime);
startActivity(intent);
//player.playUrl(url);
}
}).start();
}
});
}
}
activity_songs.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.mywifi.SongsActivity"
tools:ignore="MergeRootFrame"
android:baselineAligned="false"
android:background="@drawable/scene">
<ListView
android:id="@+id/listView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
</LinearLayout>
MusicData这个类就是需要在ListView显示的数据,将其封装一个类。
自定义BaseAdapter如上图ListViewAdapter 定义所示,类比即可。难度不大
通过以上几次的讲解,我们已获得了具有本地音乐的list,并将其显示在ListView上,接下来博主将详细的讲解Media类的使用及Service服务的使用,敬请期待