我无法将参数i传递给按钮[i]

时间:2013-03-05 08:32:39

标签: android media-player

我试图在按钮点击时发出声音,我试图让它只调用.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 个答案:

答案 0 :(得分:0)

在Listener中,您希望使用在Listener中声明的变量。

您正在尝试使用在代码中声明的变量(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方法

答案 1 :(得分: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.
            }
        });
       }

答案 2 :(得分: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();

        }



    } );
    }


}      

答案 3 :(得分: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();
        }
    });
}