我正在使用ListView和MediaPlayer开发一个项目。我希望在原始文件夹中包含类似列表或声音数组的内容,并将它们分配到某个位置 list1file在listview中的位置0,position2file在listview中的位置1等等...所以当用户点击例如位置3时,MediaPlayer创建位于第4位的文件并播放它。 我创建了整数
int[] songPos = {R.raw.position1,R.raw.position2,R.raw.position3,R.raw.position4};
和mp
public static MediaPlayer mp = new MediaPlayer();
我尝试了这个:
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selectedItemPos = (String) getItemAtPosition(position);
int resId = getResources().getIdentifier(selectedItemPos, songPos, UnitPackage);
MediaPlayer mp = MediaPlayer.create(CentralActivity.this, resId);
mp.start();
}
});
但我收到了错误:
The method getItemAtPosition(int) is undefined for the type new AdapterView.OnItemClickListener(){}
和
The method getIdentifier(String, String, String) in the type Resources is not applicable for the arguments (String, int[], String)
我相信这些错误是愚蠢的,很容易修复,但由于我还是相当新的开发,我不知道如何修复它们。所以我的问题是:我该如何解决这个问题?或者这是做我想做的正确方法吗?
答案 0 :(得分:3)
这样做:
int[] songPos = {R.raw.position1,R.raw.position2,R.raw.position3,R.raw.position4};
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int resId = songPos[position];
MediaPlayer mp = MediaPlayer.create(CentralActivity.this, resId);
mp.start();
}
});
答案 1 :(得分:0)
getItemAtPosition
返回Object类型(参见定义here)我认为您需要将对象强制转换为字符串。
String selectedItemPos = (String) getItemAtPosition(position);
答案 2 :(得分:0)
使用
Context context = getContext(); // or getBaseContext(), or getApplicationContext()
int resId = getResources().getIdentifier("raw/song_name", null, context.getPackageName());
这里song_name是RAW文件夹中命名的文件..
声明名为的文件的字符串[]。
int resId = getResources().getIdentifier("raw/"+str_arr[position], null, context.getPackageName());