0

我试图在按钮单击时播放声音,我试图让它只调用 .start() 函数,但问题是我在 onclick 函数中设置了 i 参数,因此它不会将 i 传递给 onclicklistner 函数任何想法如何解决?这是我的代码

package com.example.buttonsdemo;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements View.OnClickListener{

    //Creating Sound arrays 
    int i=0;
    MediaPlayer[] mediaplayer = new MediaPlayer[120];
    Button button[] = new Button [120]; 


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    //Initialize the mediaplayer
        for(int z=0;z<120;z++)
        {
            mediaplayer[z]=null;
        }


        //Initialize  Button Array

        for(int x=0;x<120;x++)
        {
            button[x]=new Button(this);
            button[x].setOnClickListener(this);
        }

        //Creating Media player array
        mediaplayer[0]= MediaPlayer.create(this,R.raw.akali);
        mediaplayer[1]= MediaPlayer.create(this,R.raw.alistar);




        button[i].setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                switch(v.getId())
                {

            case R.id.akali:
                    i=0;
                break;
            case R.id.alistar:
                    i=1;
                break;
                        }   
                mediaplayer[i].start();

            }



        } );




}

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }




}
4

4 回答 4

0

所以基本上你只需要即时制作几个按钮,点击时会产生不同的声音。试试这个代码:

Button myButton[] = new Button[100];
MediaPlayer mySound = new MediaPlayer();
for (int i=0; i<100; i++) {
    myButton[i] = new Button(this);
    myButton[i].setId(i+1);
    myButton[i].setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Resources res = context.getResources();
            int soundId = res.getIdentifier("sound" + v.getId(), "raw", context.getPackageName());
            mySound.create(getApplicationContext(), soundId);
            mySound.start();
        }
    });
}
于 2013-03-05T08:48:12.477 回答
0

我相信你的 onCreate 应该是这样创建的:

     protected void onCreate(Bundle savedInstanceState) {         
     super.onCreate(savedInstanceState);                      
     setContentView(R.layout.activity_main);                
     //Initialize the mediaplayer                                 
    for(int z=0;z<120;z++)
    {
        mediaplayer[z]=null;
    }

     mediaplayer[0]= MediaPlayer.create(this,R.raw.akali);
    mediaplayer[1]= MediaPlayer.create(this,R.raw.alistar);



    //Initialize  Button Array

    for( x=0;x<120;x++)
    {
        button[x]=new Button(this);


          button[x].setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            mediaplayer[x].start();

        }



    } );
    }


}      
于 2013-03-05T08:41:50.330 回答
0

在侦听器中,您想使用在侦听器中声明的变量。

您正在尝试使用i在运行侦听器时未运行的代码中声明的变量 ()。

new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int idx;
        switch(v.getId()) {
        case R.id.akali:
            idx=0;
            break;
        case R.id.alistar:
            idx=1;
            break;
        }   
        mediaplayer[idx].start();
    }
}

或者start()case.

于 2013-03-05T08:38:33.620 回答
0

转储 'i' 声明。用这个替换方法(“按钮 theButton”需要保持“最终”)。

for(int z=0;z<120;z++)
        {
        final Button theButton = button[z];
        theButton.setOnClickListener(new View.OnClickListener()
        {

            public void onClick(View v)
            {
                // TODO Auto-generated method stub
               // do what you want.
            }
        });
       }
于 2013-03-05T08:39:18.050 回答