Java 将spinner中的selecteditempostion与具有资源的arraylist进行比较

Java 将spinner中的selecteditempostion与具有资源的arraylist进行比较,java,android,arraylist,spinner,Java,Android,Arraylist,Spinner,这可能是一个愚蠢的问题,但我对编码非常陌生,所以请容忍我 当按下按钮并在微调器中选择歌曲时,我尝试播放音频文件。但是数字似乎没有更新,我只播放了同一首歌 private void Onclick() { final int[] songlist ={ R.raw.salsa, R.raw.fantasy, }; mp = MediaPlayer.create(this, songlist[spinner.getSelec

这可能是一个愚蠢的问题,但我对编码非常陌生,所以请容忍我

当按下按钮并在微调器中选择歌曲时,我尝试播放音频文件。但是数字似乎没有更新,我只播放了同一首歌

 private void Onclick() {
    final int[] songlist ={
            R.raw.salsa,
            R.raw.fantasy,
    };

    mp = MediaPlayer.create(this, songlist[spinner.getSelectedItemPosition()]);
    mp.setLooping(true);

    play_btn.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    mp.start();}


            });}
为什么这不起作用

编辑:onCreate方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    play_btn = (ImageButton) findViewById(R.id.play_btn);

    spinner = (Spinner) findViewById(R.id.song_spinner);

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.songs_array, android.R.layout.simple_spinner_item);


    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(adapter);

    Onclick();



}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play_btn=(ImageButton)findviewbyd(R.id.play_btn);
微调器=(微调器)findViewById(R.id.song\u微调器);
ArrayAdapter=ArrayAdapter.createFromResource(此,
R.array.songs\u数组,android.R.layout.simple\u微调器\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);
Onclick();
}

要实现此功能,您只需在每次单击按钮时初始化media player对象

play_btn.setOnClickListener(
        new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            // in your code it is initialised with the first selected object
                mp = MediaPlayer.create(this, songlist[spinner.getSelectedItemPosition()]);
                mp.setLooping(true);
                mp.start();}
        })};
你可以这样做:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        selectedSong = position;
    }

    @Override
    public void onNothingSelected(AdapterView<?> parentView) {}
});
添加一个类属性,如:

final int[] songlist ={
        R.raw.salsa,
        R.raw.fantasy,
};

int selectedSong; //default to 0
然后在类中,您可以使用以下命令添加微调器值更改事件的侦听器:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        selectedSong = position;
    }

    @Override
    public void onNothingSelected(AdapterView<?> parentView) {}
});

GetSelectEditePosition()不是Spinner类的方法,您是否将其与ListView混淆?谢谢您的回复,您知道其他方法吗?您可以向我展示Spinner属性的代码吗?(声明和初始化)?这是在我的onCreate方法中:我会编辑它。我已经根据你的UpdateAnks为回复添加了一个答案,我尝试了这个方法,但只得到了以下错误:无法解析方法“create(anonymous android.view.view.OnClickListener,int)”检查方法的语法!你说的我都做了,但我还是犯了个错误。我最终改变了
mp=MediaPlayer.create(这是歌曲列表[selectedsong])
to mp=
MediaPlayer.create(MainActivity.this,歌曲列表[selectedsong])这就成功了!是的,显然你需要改变第一类的上下文;)