0

我是 iOS 的 android 编程新手。我似乎无法弄清楚这一点,而且看起来很简单。我想调用一个方法并向它发送一个数字并让它根据数字播放某种声音。我有大约 100 种声音,所以当我点击 ListView 中的一行时,我想调用此方法。如何使 num 附加到“声音”

playSound(1);

void playSound(int num) {
String string = new String("R.raw.sound"+ num);  
    Uri myUri = Uri.parse(string);
    mPlayer = MediaPlayer.create(MainActivity.this, myUri);
}
4

3 回答 3

0

希望你已经解决了你的问题。但是,如果上述所有答案方法都对您不起作用,那么您可能会尝试并出现在我脑海中的方法很少。他们可能会帮助你。

方法一:

另一种方法是将 100 首歌曲的名称保存在array.xml文件中。就像是:

<resources>
    <string-array name="song_names">        
        <item>song_name1</item>
        <item>song_name2</item>  
        <item>song_name3</item>
        ...
    </string-array>
</resources>

然后您可以获取数组并ith从那里选择名称。// 在 onCreate() 或函数之外的某个地方 String[] allSongNames = context.getResources().getStringArray(R.array.song_names);

//Get ith name based on your parameter
void playSound(int num) {
    String string = allSongNames[num];  
    Uri myUri = Uri.parse(string);
    mPlayer = MediaPlayer.create(MainActivity.this, myUri);
}

方法二:

如果您不想在数组中存储 100 个名称,则可能有替代方案。我假设你已经以某种模式命名了你的 100 首歌曲。所以,假设它像song_name1, song_name3, song_name3...

你只能有一个字符串string.xml:song_name

然后您将该字符串连接到num要传递的值:

String songNameIni = res.getString(R.string.initial_song_name);
void playSound(int num) {
    String fullSongName = songNameIni + String.valueOf(num);  
    Uri myUri = Uri.parse(fullSongName);
    mPlayer = MediaPlayer.create(MainActivity.this, myUri);
}

希望这可以帮助。

于 2013-06-03T06:51:34.680 回答
0

对于 ListView 它是

初始化

ListView list = (ListView) findViewById(R.id.vmf_items_list);
list.setAdapter(adapter);
list.setOnItemClickListener(LstListener);

OnItemClickListener

private OnItemClickListener LstListener = new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                   int Pos=position;
                   //your method

    }
};
于 2013-06-02T06:06:51.490 回答
0

您可以使用:

int id = getResources().getIdentifier("sound"+num, "raw", getPackageName());

获取声音 ID 并将其传递给方法

mPlayer = MediaPlayer.create(MainActivity.this, id);
于 2013-06-02T06:08:32.530 回答