嗨,我正在做音乐播放器,我想从外部存储中复制歌曲,但我不知道如何在onItemClick方法上获得位置
我的原始目录中也有3首歌曲,但没有出现在列表视图中
这是我的代码
ArrayList<String> arrayList;
ListView listaCanciones;
ArrayAdapter<String> adapter;
MediaPlayer mediaPlayer [];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_explorador);
public void doStuff(){
listaCanciones = (ListView)findViewById(R.id.lv);
arrayList = new ArrayList<>();
obtenerMusica();
adapter = new ArrayAdapter<>(this, R.layout.list_view_configuracion, arrayList);
listaCanciones.setAdapter(adapter);
listaCanciones.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
}
});
}
public void obtenerMusica(){
ContentResolver contentResolver = getContentResolver();
Uri songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor songCursor = contentResolver.query(songUri, null, null, null, null);
if (songCursor != null && songCursor.moveToFirst()){
int songTitle = songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int songArtist = songCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
do {
String currentTitle = songCursor.getString(songTitle);
String currentArtist = songCursor.getString(songArtist);
arrayList.add(currentTitle + "\n" + currentArtist);
} while (songCursor.moveToNext());
}
}
答案 0 :(得分:0)
“如何在我的onItemClick方法上获得位置?”
onItemClick的第三个参数是位置:
public void onItemClick(AdapterView<?> adapterView, View view, int i /*position*/, long l)
您最好创建一个自定义数据类,例如SongData,其中包含标题,艺术家和 URI 。
private class SongData{
public String artist;
public String title;
public String path;
}
然后您创建一个ArrayList
的{{1}}(而不是SongData
的ArrayList)。
在您的String
方法中,使用光标中的信息填充ArrayList:
obtenerMusica()
在您的onItemClick中,播放音乐:
...
do {
String currentTitle = songCursor.getString(songTitle);
String currentArtist = songCursor.getString(songArtist);
String path = songCursom.getString(MediaStore.Audio.Media.DATA);
SongData songData = new SongData();
data.artist = currentArtist;
data.title = currentTitle;
data.path = "file:///" + path;
arrayList.add(songData);
} while (songCursor.moveToNext());
为什么3首歌曲没有出现在listView中?
您似乎没有从 @Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
SongData data = arrayList.get(i);
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer. setDataSource(data.path);
mediaPlayer.start();
}
调用doStuff()
方法。