只是免责声明,我对 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
}
});
}
}
如果有更好的方法来做到这一点,请告诉我。我最不想做的就是在早期养成坏习惯。我将继续努力,如果找到解决方案,我会回复。
预先感谢您的宝贵时间!
最佳答案
以这种方式更改您的值数组:
<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
文件夹中在 ListView 中选择的名称的文件。
(在StackOverflow中快速编码,可能存在语法错误)
关于android - 单击列表项时播放声音文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8879993/