Воспроизведение звукового файла при нажатии элемента списка - PullRequest
2 голосов
/ 16 января 2012

Просто отказ от ответственности, я очень плохо знаком с 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 Ответ

3 голосов
/ 16 января 2012

Измените массив значений следующим образом:

<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, возможны синтаксические ошибки)

...