如何从原始文件夹中获取所有.mp3文件到自定义数组listview并播放该歌曲? [英] How to get all .mp3 files from raw folder to custom array listview and play that song?

查看:88
本文介绍了如何从原始文件夹中获取所有.mp3文件到自定义数组listview并播放该歌曲?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个可以播放.mp3文件的应用程序.因此,在此应用程序中,我创建了一个自定义listview适配器,用于将.mp3文件从原始文件夹填充到listview,并创建了一个模型类,在我的原始文件夹中20个.mp3文件.因此,我想将所有这些原始文件夹.mp3文件添加到每一行的listview中.之后,当用户单击该特定listview项目时,播放给定位置的那首歌曲.

I am developing one app that can play .mp3 file.So,In this app i have created one custom listview adapter for populating the .mp3 files from raw folder to listview and created one model class and in my raw folder i have 20 .mp3 files.So, I want to add this all raw folder .mp3 files to listview in each row.after that when user click that particular listview item at that time play that song given position.

注意:我不是从SDCARD导入.mp3文件.

Note: I am not importing that .mp3 files from SDCARD.

这是我的适配器

public class RingtoneAdapter extends ArrayAdapter<RingtoneModel> {

private List<RingtoneModel> planetList;
private Context context;


public RingtoneAdapter(List<RingtoneModel> planetList, Context ctx) {
    super(ctx, R.layout.ringtone_row_layout, planetList);
    this.planetList = planetList;
    this.context = ctx;
}

public int getCount() {
    return planetList.size();
}

public RingtoneModel getItem(int position) {
    return planetList.get(position);
}

public long getItemId(int position) {
    return planetList.get(position).hashCode();
}

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    PlanetHolder holder = new PlanetHolder();


    if (convertView == null) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.ringtone_row_layout, null);

        TextView tv = (TextView) v.findViewById(R.id.name);

        holder.planetNameView = tv;

        v.setTag(holder);
    }
    else 
        holder = (PlanetHolder) v.getTag();

    RingtoneModel p = planetList.get(position);
    holder.planetNameView.setText(p.getName());


    return v;
}


private static class PlanetHolder {
    public TextView planetNameView;
}


}

这是我的模型课程

public class RingtoneModel {

private String name;
private Integer distance;
private String descr;
private int idImg;

public RingtoneModel(String name) {
    this.name = name;

}

public RingtoneModel(String name, String descr) {
    this.name = name;
    this.descr = descr;
}

public RingtoneModel(String name, Integer distance, String descr, int idImg) {
    this.name = name;
    this.descr = descr;
    this.idImg = idImg;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Integer getDistance() {
    return distance;
}
public void setDistance(Integer distance) {
    this.distance = distance;
}
public int getIdImg() {
    return idImg;
}
public void setIdImg(int idImg) {
    this.idImg = idImg;
}
}

这是我的MainActivity

public class MainActivity extends AppCompatActivity {


List<RingtoneModel> ringtoneList = new ArrayList<RingtoneModel>();
RingtoneAdapter ringAdapter;
ListView ringtoneListMain;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    initRingtoneList();

    ringtoneListMain = (ListView)findViewById(R.id.rintoneList);

    ringAdapter = new RingtoneAdapter(ringtoneList,this);

    ringtoneListMain.setAdapter(ringAdapter);

    ringtoneListMain.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        }
    });
}

private void initRingtoneList() {

    ringtoneList.add(new RingtoneModel("xyz"));
    ringtoneList.add(new RingtoneModel("Venus"));
    ringtoneList.add(new RingtoneModel("Mars"));
    ringtoneList.add(new RingtoneModel("Jupiter"));
    ringtoneList.add(new RingtoneModel("Saturn"));
    ringtoneList.add(new RingtoneModel("Uranus"));
    ringtoneList.add(new RingtoneModel("Neptune"));
}
}

所以,如果有人知道我该怎么做,那么请帮助我...

So,If anyone know how i can do all this then please help me...

推荐答案

当用户单击ListView中的按钮时,首先在ListView中获得项目索引.

First get the item index in the ListView when users click a button in ListView.

    View parentRow = (View) v.getParent();
    ListView listView = (ListView) parentRow.getParent();
    final int position = listView.getPositionForView(parentRow);

获得准确的位置索引后,找到英语音频文件并为该音频文件创建URI.

After you got the exact position index, find the English word audio file and create an URI for that audio file.

Uri mp3 = Uri.parse("android.resource://"
          + context.getPackageName() + "/raw/"
          + datas.get(position).word);

获得音频文件URI后,您可以实例化MediaPlayer类并在Android中播放音频文件.

After you have the audio file URI, you can instantiate the MediaPlayer class and play the audio file in Android.

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(context, mp3);
    mediaPlayer.prepare(); // might take long! (for buffering, etc)
    mediaPlayer.start();
    mediaPlayer.setOnCompletionListener(onCompletionListener);

音乐停止播放后,请立即释放MediaPlayer实例,以免消耗大量资源.

When the music stops, release the MediaPlayer instance immediately so that it will not consume lot of resources.

 private OnCompletionListener onCompletionListener = new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        mediaPlayer.release();
        mediaPlayer = null;
    }
};

这篇关于如何从原始文件夹中获取所有.mp3文件到自定义数组listview并播放该歌曲?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆