我的代码是能够正常工作的。
        mButton = new Button[4];
        mButton[0] = (Button)findViewById(R.id.button1);
        mButton[1] = (Button)findViewById(R.id.button2);
        mButton[2] = (Button)findViewById(R.id.button3);
        mButton[3] = (Button)findViewById(R.id.button4);
        
        for(int i = 0; i < 4; i++){
            mButton[i].setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                // TODO Auto-generated method stub
                    Log.i("test", "" + v.getId());
                
                }
            });
        }希望能提供一下log分析下,初步认为是mClickIndex的值被修改,越界了。

解决方案 »

  1.   

    谢谢你的回答
    但是不知有否运行程序?
    因为有点怀疑
    for循环里的变量i好像传不到mButton[i].setOnClickListener()里面去
    必须要定义成成员变量或者全局变量
      

  2.   

    程序我是运行过的  并且有log打印出来
      

  3.   


    你的代码确实是没有问题的,但是你试着往public void onClick(View v) {}里面传个参数,
    比如说把for循环的i传进去,就会有问题了
      

  4.   


    知道错误所在了,监听到按钮,传到public void onClick(View v) {}里面的mClickIndex都已经变成25了,数组必然越界了。因为onClick(View v)这个函数要等监听之后才执行
      

  5.   

    大家有没有办法把没有变化之前的mClickIndex传到onClick(View v)里面去
    就是说不同按钮onClick(View v)里面的mClickIndex对应各自的检索值
      

  6.   

    貌似最简单的方法是一个button做一个监听函数, 不然真没办法区分处理监听函数里面处理的是哪个button
      

  7.   


    i传不进去和变量的作用域有关系吧~
    用全局变量也不能解决你的问题
    除非能知道当前被按下button类似id的东西
      

  8.   

    今天看了个帖子,貌似有解决方法,不知LZ是不是已经发现了
    http://blog.csdn.net/Android_Tutor/archive/2010/07/16/5740845.aspx    sButton.setOnClickListener(this);   //两个button设同一个listen
        pButton.setOnClickListener(this);       //铵钮点击事件响应   
        public void onClick(View v) {   
            if(v == sButton){   
                SerializeMethod();   
            }else{   
                PacelableMethod();   
            }   
        }   
      

  9.   

    mClickIndex确实传不进,除非是包含该类的类的一个属性。我也碰到过这种问题