2012-01-16 8 views
2

免責事項、私はアンドロイドとJavaの両方に非常に新しいです。リストアイテムがクリックされたときにサウンドファイルを再生する

私がこれでやっている最終製品は、アプリケーションのようなサウンドボードです。私はユーザーが関連するサウンドファイルを再生するためにタップすることができるサウンドのリストを表示したい。

これまでのところ、strings.xmlファイルにいくつかの文字列配列を設定しました。 1つの配列は利用可能なサウンドを表し、2番目の配列は実際の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 
     } 

    }); 

} 
} 

これを行うには、より良い方法がある場合は教えてください。私がしたい最後のことは、早い段階で悪い習慣を発達させることです。解決策が見つかったら、私はそれに取り組み、投稿を続けるつもりです。

お時間をいただきありがとうございます。

答えて

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ですばやくコードされ、構文エラーがある可能性があります)

+0

クイック返信ありがとうございます。どのリスト項目がクリックされたかに基づいて、リソースIDを動的に挿入するにはどうすればいいですか?したがって、MediaPlayer.create(AlexLIst.this、<ここにリストに対応するサウンドリソース);また、2つの文字列配列を使用する以外の方法については、より良い方法がありますか? –

+0

ああ、はい、私の応答を更新しました:) – Guillaume

+0

さて、今どこかに行ってきました! alex_listの項目がres/rawフォルダ内のmp3ファイル名と一致する限り、動作させることができます。表示されたテキストが異なっていて、今でもこの作業をしたいのであれば、どうすればこのことができますか?たとえば、リストの表示テキストに「Welcome to paradise」と表示される場合がありますが、ファイルはR.raw.paradise.mp3にあります。あなたの助けをありがとう、私はこのサイトを見つけてうれしいです。 –

関連する問題