2011-05-26 109 views
10

在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); 
     } 
    }; 

回答

8

是的,這是可能的。我在下面寫了一個例子,應該是比較簡單的。

像往常一樣,添加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

3
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; 
    } 
    } 
相關問題