2011-10-14 30 views
1

如果之前詢問過,請原諒我。我已經通過這個網站和其他許多人涌入,似乎無法找到答案。我有一個可用的Android應用程序,但我試圖清理代碼。我有3個按鈕:用一種方法「捕捉」多個按鈕

public Button button1, button2, button3; 

然後,我有一個方法是「待價而沽」的點擊次數:

public void getButtonClick(View view) 
{ 
switch(view.getId()) 
{ 
    case R.id.button1: 
     // Do something button1 related here 
    break; 

    case R.id.button2: 
     // Do something button2 related here 
    break; 

    case R.id.button3: 
     // Do something button3 related here 
} 
} 

我想知道的是,如果有任何方法可以讓我有一個通用的方法,只需等待按鈕單擊並獲取該變量,以便我可以避免多個開關事件語句。東西上線:

public void oneMethodForAll(View view) 
{ 
clkdBtn = view.getButtonThatWasClicked(); 
// Do stuff 
} 

任何幫助,非常感謝。 TIA

回答

1

一兩件事你可以做的是有活動的實施View.OnClickListener

public class FooActivity implements View.OnClickListener { 

    @Override 
    protected void onCreate(Bundle icicle) { 

     Button btn1 = (Button) findViewById(R.id.button1); 
     btn1.setOnClickListener(this); 

     Button btn2 = (Button) findViewById(R.id.button2); 
     btn2.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 

     switch (view.getId()) { 
     case R.id.button1: 
      // Button 1 was clicked 
      break; 

     case R.id.button2: 
      // Button 2 was clicked 
      break; 
     } 
    } 
} 

,將節省您的打字,因爲你沒有創造一束匿名點擊處理程序的一點點,但你仍然會必須單獨設置每個按鈕的onClickListener

+0

這幾乎是我一直在做的事,除了這個例子將onClickListener()添加到方程。我希望有一種方法可以通過向onClick()方法發送單擊按鈕的android:id來避免switch-case語句。這樣做可以使應用程序更簡潔,更簡單的編碼。看起來這是不允許的,所以我必須繼續我正在採取的道路。我感謝所有人的幫助。 –

0

你可以這樣做:

clkdBtn = (Button)view; 

通常按鈕本身不使用,雖然。 getButtonClick()應該響應按鈕與他們相應的行動...我不知道爲什麼你需要實際的按鈕視圖本身。

如果你想按鈕被顯示文本,你可以使用:

String text = ((Button)view).getText(); 
+0

我只需要按鈕的ID。如果視圖不正確,我會改變它。實際上我習慣於PHP。這是我第一次進入Java領域。 –

+0

按鈕的ID只是view.getId()。如果你的意思是你想獲得按鈕的變量名稱(如cancelButton),那麼你不能這樣做,你需要通過case語句來判斷它是哪一個。或者,或者創建一個具有'getNameOfButton()'方法或其他東西的自定義Button組件。或者,檢查我的帖子。 –

+0

Nah,這是我想獲得的實際「android:id」。 –

1

通常你實現不同的處理程序不同的按鈕,因爲該按鈕會發出信號的作用通常是不同的。

您可以使用View將您的View轉換爲Button,該View將作爲唯一參數傳遞到您的處理程序中。

Button clickedButton = (Button)view; 

如果你所關心的是按鈕的id,並且你的動作將基於該值,然後創建單獨的處理程序。