MediaPlayer的简介:
#Error
* MediaPlayer: error (1, -107) 网络链接错误
* MediaPlayer error (1, -2147483648) 1其实代表MEDIA_ERROR_UNKNOWN.原因在于,MP4有多种编码格式,例如H.264,H.263等,而Android版本较低的机器只支持部分编码。一旦遭遇不被支持的编码格式,MediaPlayer可能就会抛出上面的错误信息。可以使用一些视频软件查看视频的编码格式,然后转换为普遍支持的格式
# 播放音乐的流程
* 1.拿到mediaPlayer对象
两种方式
* 1.使用 MediaPlayer.create(this, R.raw.hua);的方式 播放的是资源文件夹下面的音乐
create()内部的操作是: new MediaPlayer();-- mp.setDataSource()---mp.prepare();
* 2.使用new MediaPlayer()的形式
* 2.设置播放资源文件的路径
1)mediaPlayer.setDataSource("mnt/sdcard/hua.mp3"); 可能需要更改sd卡的权限(命令行的形式) 才能导入
* adb shell
* mount -o remount rw /
* chmod 075 sdcard
*
* <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2)mediaPlayer.setDataSource(this, Uri.parse("mnt/sdcard/hua.mp3"));
3)//播放assets目录下的资源
* AssetFileDescriptor fileDescriptor = getAssets().openFd("hua.mp3");
mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor())
4)mediaPlayer.setDataSource("http://172.17.26.115:8080/linzhiling/hua.mp3");//网络地址
<uses-permission android:name="android.permission.INTERNET"/>
* 3. 播放前准备播放mp.prepare();---mediaPlayer.prepareAsync();
* 4.调用方法进行播放
*
*
由于 mediaPlayer调用的是底层的代码 在退出的时候 资源还在占用 音乐还在持续播放 所以.,需要在合适的位置去释放资源
* if (mediaPlayer != null) {
mediaPlayer.release();//释放资源
mediaPlayer = null;
}
* flag记录是否处于暂停状态,如果处于暂停,调用start继续播放,,,否则设置资源,准备然后开始播放
###播放asserts下面的音乐
* 使用asserts下面的文件的时候,可能会出现只播放第一首音乐
mediaPlayer.setDataSource(fd, openFd.getStartOffset(), openFd.getLength())
* MediaPlayer: error (1, -107) 网络链接错误
* MediaPlayer error (1, -2147483648) 1其实代表MEDIA_ERROR_UNKNOWN.原因在于,MP4有多种编码格式,例如H.264,H.263等,而Android版本较低的机器只支持部分编码。一旦遭遇不被支持的编码格式,MediaPlayer可能就会抛出上面的错误信息。可以使用一些视频软件查看视频的编码格式,然后转换为普遍支持的格式
# 播放音乐的流程
* 1.拿到mediaPlayer对象
两种方式
* 1.使用 MediaPlayer.create(this, R.raw.hua);的方式 播放的是资源文件夹下面的音乐
create()内部的操作是: new MediaPlayer();-- mp.setDataSource()---mp.prepare();
* 2.使用new MediaPlayer()的形式
* 2.设置播放资源文件的路径
1)mediaPlayer.setDataSource("mnt/sdcard/hua.mp3"); 可能需要更改sd卡的权限(命令行的形式) 才能导入
* adb shell
* mount -o remount rw /
* chmod 075 sdcard
*
* <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2)mediaPlayer.setDataSource(this, Uri.parse("mnt/sdcard/hua.mp3"));
3)//播放assets目录下的资源
* AssetFileDescriptor fileDescriptor = getAssets().openFd("hua.mp3");
mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor())
4)mediaPlayer.setDataSource("http://172.17.26.115:8080/linzhiling/hua.mp3");//网络地址
<uses-permission android:name="android.permission.INTERNET"/>
* 3. 播放前准备播放mp.prepare();---mediaPlayer.prepareAsync();
* 4.调用方法进行播放
*
*
由于 mediaPlayer调用的是底层的代码 在退出的时候 资源还在占用 音乐还在持续播放 所以.,需要在合适的位置去释放资源
* if (mediaPlayer != null) {
mediaPlayer.release();//释放资源
mediaPlayer = null;
}
* flag记录是否处于暂停状态,如果处于暂停,调用start继续播放,,,否则设置资源,准备然后开始播放
###播放asserts下面的音乐
* 使用asserts下面的文件的时候,可能会出现只播放第一首音乐
mediaPlayer.setDataSource(fd, openFd.getStartOffset(), openFd.getLength())
案例实现:
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/linear" >
</ListView>
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#27282A"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image_pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pre" />
<ImageView
android:id="@+id/iamge_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play" />
<ImageView
android:id="@+id/image_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/next" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image_touxiang"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="goodTime"
android:textColor="#ff0000" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:id="@+id/text_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00:00/05:17"
android:textColor="#ff0000" />
</LinearLayout>
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/linear" >
</ListView>
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#27282A"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image_pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pre" />
<ImageView
android:id="@+id/iamge_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play" />
<ImageView
android:id="@+id/image_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/next" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image_touxiang"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="goodTime"
android:textColor="#ff0000" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:id="@+id/text_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00:00/05:17"
android:textColor="#ff0000" />
</LinearLayout>
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
Activity中的实现:
package com.example.mediaplayer_03;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity implements OnPreparedListener, OnClickListener {
private ListView listView;
private ImageView image_pre;
private ImageView iamge_play;
private ImageView image_next;
private ImageView image_touxiang;
private TextView text_name;
private TextView text_time;
private SeekBar seekBar;
private List<MusicBean> list;
private MyAdapter myAdapter;
private int index = 0;//播放音乐的位置
private MediaPlayer mediaPlayer;
private boolean flag = false;//记录暂停的状态
private Timer timer;
private int duration;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what == 0) {
//获取内容
int current = (Integer) msg.obj;//10001...>100
//simpleDateFormat.format(new Date(current))
//设置时间的显示
text_time.setText(simpleDateFormat.format(new Date(current))+"/"+simpleDateFormat.format(new Date(duration)));
//例如总时长是1000...当前到了200...确定一下进度条的进度?..200/1000*100=0
seekBar.setProgress(current*100/duration);
}
};
};
private SimpleDateFormat simpleDateFormat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控件
listView = (ListView) findViewById(R.id.list_view);
image_pre = (ImageView) findViewById(R.id.image_pre);
iamge_play = (ImageView) findViewById(R.id.iamge_play);
image_next = (ImageView) findViewById(R.id.image_next);
image_touxiang = (ImageView) findViewById(R.id.image_touxiang);
text_name = (TextView) findViewById(R.id.text_name);
text_time = (TextView) findViewById(R.id.text_time);
seekBar = (SeekBar) findViewById(R.id.seek_bar);
//创建一个mediaPlayer
mediaPlayer = new MediaPlayer();
timer = new Timer();
//创建一个事件格式化的对象
simpleDateFormat = new SimpleDateFormat("mm:ss");
//数据展示...
try {
list = new ArrayList<MusicBean>();
list.add(new MusicBean(getAssets().openFd("a.mp3"), "A", R.drawable.a));
list.add(new MusicBean(getAssets().openFd("a.mp3"), "Fade", R.drawable.b));
list.add(new MusicBean(getAssets().openFd("a.mp3"), "画", R.drawable.c));
list.add(new MusicBean(getAssets().openFd("a.mp3"), "Roar", R.drawable.d));
list.add(new MusicBean(getAssets().openFd("a.mp3"), "Sugar", R.drawable.e));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//设置适配器
myAdapter = new MyAdapter(MainActivity.this,list);
listView.setAdapter(myAdapter);
//设置条目的监听事件
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
index = position;
//播放音乐
play();
}
});
//给那些图片设置点击事件
iamge_play.setOnClickListener(this);
image_next.setOnClickListener(this);
image_pre.setOnClickListener(this);
//seekBar的监听事件
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// 用户拖动进度条的时候,,,音乐到指定的位置去播放
if (mediaPlayer != null && fromUser) {
//根据拖动到的进度,来计算时间20...20*duration/100
int msec = progress*duration/100;
//音乐到指定的位置去播放
mediaPlayer.seekTo(msec);
}
}
});
}
/**
* 播放音乐的方法
*/
protected void play() {
try {
//2.重置资源
mediaPlayer.reset();
//3.设置数据源
AssetFileDescriptor openFd = list.get(index).getOpenFd();
mediaPlayer.setDataSource(openFd.getFileDescriptor(), openFd.getStartOffset(), openFd.getLength());
//4.准备播放
mediaPlayer.prepareAsync();
//5.准备完成的监听
mediaPlayer.setOnPreparedListener(this);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 准备完成的回调方法
*/
@Override
public void onPrepared(MediaPlayer mp) {
// 开始播放
mediaPlayer.start();
//图片换成暂停的样式
iamge_play.setImageResource(R.drawable.pause);
//显示歌名
text_name.setText(list.get(index).getName());
//显示头像
image_touxiang.setImageResource(list.get(index).getImage());
//一旦音乐开始播放,mediaPlayer会有一个总时长的方法
duration = mediaPlayer.getDuration();
//执行一个事件任务,,,一秒执行一次
TimerTask task = new TimerTask() {
@Override
public void run() {
//每隔一秒钟获取一下当前音乐播放的时间
int currentPosition = mediaPlayer.getCurrentPosition();
//设置时间文本的显示需要在主线程中进行
Message msg = Message.obtain();
msg.what = 0;//区分一个消息
msg.obj = currentPosition;//消息的内容
handler.sendMessage(msg);
}
};
timer.schedule(task , 0, 1000);
}
/**
* 图片的点击事件
* @param v
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iamge_play://播放
//1.如果正在播放需要暂停
if (mediaPlayer.isPlaying()) {//正在播放
mediaPlayer.pause();
//设置暂停状态
flag = true;
//改变图片变成播放的样式
iamge_play.setImageResource(R.drawable.play);
}else {//没有播放:1.压根没开始2.暂停播放的状态
if (flag) {
//继续播放
mediaPlayer.start();
//改变图片变成暂停的样式
iamge_play.setImageResource(R.drawable.pause);
}else {
play();
}
}
break;
case R.id.image_next://下一首
next();
break;
case R.id.image_pre://上一首
pre();
break;
default:
break;
}
}
/**
* 上一首
*/
private void pre() {
if (index <= 0) {
index = list.size();//1..0--4
}
index --;
play();
}
/**
* 下一首
*/
private void next() {
index ++;
//取余
index = index%list.size();
play();
}
}
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity implements OnPreparedListener, OnClickListener {
private ListView listView;
private ImageView image_pre;
private ImageView iamge_play;
private ImageView image_next;
private ImageView image_touxiang;
private TextView text_name;
private TextView text_time;
private SeekBar seekBar;
private List<MusicBean> list;
private MyAdapter myAdapter;
private int index = 0;//播放音乐的位置
private MediaPlayer mediaPlayer;
private boolean flag = false;//记录暂停的状态
private Timer timer;
private int duration;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what == 0) {
//获取内容
int current = (Integer) msg.obj;//10001...>100
//simpleDateFormat.format(new Date(current))
//设置时间的显示
text_time.setText(simpleDateFormat.format(new Date(current))+"/"+simpleDateFormat.format(new Date(duration)));
//例如总时长是1000...当前到了200...确定一下进度条的进度?..200/1000*100=0
seekBar.setProgress(current*100/duration);
}
};
};
private SimpleDateFormat simpleDateFormat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控件
listView = (ListView) findViewById(R.id.list_view);
image_pre = (ImageView) findViewById(R.id.image_pre);
iamge_play = (ImageView) findViewById(R.id.iamge_play);
image_next = (ImageView) findViewById(R.id.image_next);
image_touxiang = (ImageView) findViewById(R.id.image_touxiang);
text_name = (TextView) findViewById(R.id.text_name);
text_time = (TextView) findViewById(R.id.text_time);
seekBar = (SeekBar) findViewById(R.id.seek_bar);
//创建一个mediaPlayer
mediaPlayer = new MediaPlayer();
timer = new Timer();
//创建一个事件格式化的对象
simpleDateFormat = new SimpleDateFormat("mm:ss");
//数据展示...
try {
list = new ArrayList<MusicBean>();
list.add(new MusicBean(getAssets().openFd("a.mp3"), "A", R.drawable.a));
list.add(new MusicBean(getAssets().openFd("a.mp3"), "Fade", R.drawable.b));
list.add(new MusicBean(getAssets().openFd("a.mp3"), "画", R.drawable.c));
list.add(new MusicBean(getAssets().openFd("a.mp3"), "Roar", R.drawable.d));
list.add(new MusicBean(getAssets().openFd("a.mp3"), "Sugar", R.drawable.e));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//设置适配器
myAdapter = new MyAdapter(MainActivity.this,list);
listView.setAdapter(myAdapter);
//设置条目的监听事件
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
index = position;
//播放音乐
play();
}
});
//给那些图片设置点击事件
iamge_play.setOnClickListener(this);
image_next.setOnClickListener(this);
image_pre.setOnClickListener(this);
//seekBar的监听事件
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// 用户拖动进度条的时候,,,音乐到指定的位置去播放
if (mediaPlayer != null && fromUser) {
//根据拖动到的进度,来计算时间20...20*duration/100
int msec = progress*duration/100;
//音乐到指定的位置去播放
mediaPlayer.seekTo(msec);
}
}
});
}
/**
* 播放音乐的方法
*/
protected void play() {
try {
//2.重置资源
mediaPlayer.reset();
//3.设置数据源
AssetFileDescriptor openFd = list.get(index).getOpenFd();
mediaPlayer.setDataSource(openFd.getFileDescriptor(), openFd.getStartOffset(), openFd.getLength());
//4.准备播放
mediaPlayer.prepareAsync();
//5.准备完成的监听
mediaPlayer.setOnPreparedListener(this);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 准备完成的回调方法
*/
@Override
public void onPrepared(MediaPlayer mp) {
// 开始播放
mediaPlayer.start();
//图片换成暂停的样式
iamge_play.setImageResource(R.drawable.pause);
//显示歌名
text_name.setText(list.get(index).getName());
//显示头像
image_touxiang.setImageResource(list.get(index).getImage());
//一旦音乐开始播放,mediaPlayer会有一个总时长的方法
duration = mediaPlayer.getDuration();
//执行一个事件任务,,,一秒执行一次
TimerTask task = new TimerTask() {
@Override
public void run() {
//每隔一秒钟获取一下当前音乐播放的时间
int currentPosition = mediaPlayer.getCurrentPosition();
//设置时间文本的显示需要在主线程中进行
Message msg = Message.obtain();
msg.what = 0;//区分一个消息
msg.obj = currentPosition;//消息的内容
handler.sendMessage(msg);
}
};
timer.schedule(task , 0, 1000);
}
/**
* 图片的点击事件
* @param v
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iamge_play://播放
//1.如果正在播放需要暂停
if (mediaPlayer.isPlaying()) {//正在播放
mediaPlayer.pause();
//设置暂停状态
flag = true;
//改变图片变成播放的样式
iamge_play.setImageResource(R.drawable.play);
}else {//没有播放:1.压根没开始2.暂停播放的状态
if (flag) {
//继续播放
mediaPlayer.start();
//改变图片变成暂停的样式
iamge_play.setImageResource(R.drawable.pause);
}else {
play();
}
}
break;
case R.id.image_next://下一首
next();
break;
case R.id.image_pre://上一首
pre();
break;
default:
break;
}
}
/**
* 上一首
*/
private void pre() {
if (index <= 0) {
index = list.size();//1..0--4
}
index --;
play();
}
/**
* 下一首
*/
private void next() {
index ++;
//取余
index = index%list.size();
play();
}
}
适配器中:
package com.example.mediaplayer_03;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter{
private Context context;
private List<MusicBean> list;
public MyAdapter(Context context, List<MusicBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(context, android.R.layout.simple_list_item_1, null);
holder = new ViewHolder();
holder.textView = (TextView) convertView.findViewById(android.R.id.text1);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
//赋值
holder.textView.setText(list.get(position).getName());
return convertView;
}
private class ViewHolder{
TextView textView;
}
}
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter{
private Context context;
private List<MusicBean> list;
public MyAdapter(Context context, List<MusicBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(context, android.R.layout.simple_list_item_1, null);
holder = new ViewHolder();
holder.textView = (TextView) convertView.findViewById(android.R.id.text1);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
//赋值
holder.textView.setText(list.get(position).getName());
return convertView;
}
private class ViewHolder{
TextView textView;
}
}
bean文件:
package com.example.mediaplayer_03;
import android.content.res.AssetFileDescriptor;
public class MusicBean {
private AssetFileDescriptor openFd;
private String name;
private int image;
public AssetFileDescriptor getOpenFd() {
return openFd;
}
public void setOpenFd(AssetFileDescriptor openFd) {
this.openFd = openFd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImage() {
return image;
}
public void setImage(int image) {
this.image = image;
}
public MusicBean(AssetFileDescriptor openFd, String name, int image) {
super();
this.openFd = openFd;
this.name = name;
this.image = image;
}
}
import android.content.res.AssetFileDescriptor;
public class MusicBean {
private AssetFileDescriptor openFd;
private String name;
private int image;
public AssetFileDescriptor getOpenFd() {
return openFd;
}
public void setOpenFd(AssetFileDescriptor openFd) {
this.openFd = openFd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImage() {
return image;
}
public void setImage(int image) {
this.image = image;
}
public MusicBean(AssetFileDescriptor openFd, String name, int image) {
super();
this.openFd = openFd;
this.name = name;
this.image = image;
}
}