单击列表项时播放声音文件

时间:2012-01-16 12:23:24

标签: android listview media-player

只是一个免责声明,我对android和Java都很新。

我正在追求的最终产品是类似应用的音板。我想显示一个用户可以点击以播放相关声音文件的声音列表。

到目前为止,我已经在strings.xml文件中设置了几个字符串数组。一个数组表示可用的声音,第二个数组表示实际的R.raw.soundfile资源。可能更容易展示它。

<string-array name="alex_list">
    <item>Sound Title</item>
</string-array>

<string-array name="alex_sounds">
    <item>R.raw.soundfile</item>
</string-array>

这是我到目前为止的类定义。我真的不希望任何人“为我做这项工作”,但我完全迷失了从这里向前发展的地方。我觉得我应该从alex_list传递字符串数组位置(点击时)从alex_sounds获取正确的资源(应该立即播放,不需要媒体控件)。但那就是我被困住的地方。

public class AlexList extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setListAdapter(ArrayAdapter.createFromResource(getApplicationContext(), R.array.alex_list, R.layout.list_item));

    getListView().setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
            // I have zero clue what to do from here
        }

    });

}
}

如果有更好的方法可以做到这一点,请告诉我。我想做的最后一件事就是在早期养成不良习惯。如果我找到解决方案,我将继续研究并发回。

提前感谢您的时间!

1 个答案:

答案 0 :(得分:3)

以这种方式更改您的值数组:

<string-array name="alex_sounds">
    <item>soundfile</item>
</string-array>

然后您的监听器变为:(packageName是表示R文件包的字符串:例如"com.example.main"

@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
    String selectedFromList = getItemAtPosition(pos);
    int resId = getResources().getIdentifier(selectedFromList, "raw", packageName);
    MediaPlayer mp = MediaPlayer.create(AlexList.this, resId);  
    mp.start();
}

这将从您的res/raw文件夹中播放您在列表视图中选择的名称的文件。 (在StackOverflow中快速编码,可能存在语法错误)