你可以为不同的按钮使用相同的OnClickListener吗?

问题描述:

在android中,我可以为不同的按钮使用相同的OnClickListener吗?如果是的话,我怎样才能得到点击产生的按钮?我目前有4个按钮,每个按钮都有自己的OnClickListener。除了获取被点击的按钮的文本之外,每个OnClickListener都做同样的事情。我想创建一个OnClickListener,但我无法弄清楚如何确定哪个按钮被点击。谢谢你可以为不同的按钮使用相同的OnClickListener吗?

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 

      @Override 
      public void onInit(int arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     setContentView(R.layout.home); 
     Button button1 = (Button)findViewById(R.id.button1); 
     Button button2 = (Button)findViewById(R.id.button2); 
     Button button3 = (Button)findViewById(R.id.button3); 
     Button button4 = (Button)findViewById(R.id.button4); 

     //Load First Word 
     button1.setOnClickListener(button1ClickListener); 
     button2.setOnClickListener(button2ClickListener); 
     button3.setOnClickListener(button3ClickListener); 
     button4.setOnClickListener(button4ClickListener); 

    } 

代码从KARTHIK与不同的部分听众大胆

private OnClickListener button1ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     **Button button = (Button)findViewById(R.id.button1);** 
     handleButtonClick(button); 
    } 
}; 

private OnClickListener button2ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     **Button button = (Button)findViewById(R.id.button2);** 
     handleButtonClick(button); 

    } 
}; 

private OnClickListener button3ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     **Button button = (Button)findViewById(R.id.button3);** 
     handleButtonClick(button); 

    } 
}; 

private OnClickListener button4ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     **Button button = (Button)findViewById(R.id.button4);** 
     handleButtonClick(button); 

    } 
}; 

代码handleButtonclick

private void handleButtonClick(Button button) { 
     if(button.getText().equals(currentWord)){ 
      currentScore += availableScore; 
      TextView score = (TextView)findViewById(R.id.textViewScore); 
      score.setText(String.valueOf(score)); 
      currentIndex++; 
      availableScore = 4; 
      InitializeGame(); 
     } 
     else{ 
      availableScore--; 
      button.setEnabled(false); 
     } 
    } 

随着建议我修改我的代码如下:

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 

      @Override 
      public void onInit(int arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     setContentView(R.layout.home); 
     Button button1 = (Button)findViewById(R.id.button1); 
     Button button2 = (Button)findViewById(R.id.button2); 
     Button button3 = (Button)findViewById(R.id.button3); 
     Button button4 = (Button)findViewById(R.id.button4); 

     //Load First Word 
     button1.setOnClickListener(buttonClickListener); 
     button2.setOnClickListener(buttonClickListener); 
     button3.setOnClickListener(buttonClickListener); 
     button4.setOnClickListener(buttonClickListener); 

    } 

OnClickListenerCode

private OnClickListener buttonClickListener = new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      handleButtonClick((Button)arg0); 
     } 
    }; 

是的,这是可能的。我在下面写了一个例子,应该是比较简单的。

像往常一样,添加OnClickListener所有按钮,如下所示:

btn1.setOnClickListener(this); 
btn2.setOnClickListener(this); 
btn3.setOnClickListener(this); 

然后添加的onClick()事件,如下图所示:

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    if(v == btn1){ 
     //Things to do 
    } 
    if(v == btn2){ 
     //Things to do  
    } 
    if(v == btn3){ 
     //Things to do 
    } 
} 

这应该只是罚款。不要忘记为您的onCreate存在的类实现View.OnClickListener,否则所有上面设置OnClickListener的语句都将不正确。

+0

不错,我没有意识到,视图实际上是它自己的按钮。谢谢。我不得不稍微修改你的代码,但是我能够使它工作。 – atbebtg 2011-05-26 03:25:23

+0

不错@atbebtg开始 – Karthik 2011-05-26 03:33:38

protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 

      mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 

       @Override 
       public void onInit(int arg0) { 
        // TODO Auto-generated method stub 

       } 
      }); 
      setContentView(R.layout.home); 
      Button button1 = (Button)findViewById(R.id.button1); 
      Button button2 = (Button)findViewById(R.id.button2); 
      Button button3 = (Button)findViewById(R.id.button3); 
      Button button4 = (Button)findViewById(R.id.button4); 

      //Load First Word 
      button1.setOnClickListener(button1ClickListener); 
      button2.setOnClickListener(button2ClickListener); 
      button3.setOnClickListener(button3ClickListener); 
      button4.setOnClickListener(button4ClickListener); 

     } 

    @Override 
     public void onClick(View v) 

    { 

    int id = v.getId(); 
    switch (id) { 
    case R.id.button1: 
    //your code 
    break; 
case R.id.button2: 

    break; 
case R.id.button3: 

    break; 
    } 
    }