2013-10-18 29 views
0

我正在爲eclipse和Java製作Android的基本計算器。任務是有兩個值,如輸入和結果。因此,當第一個數字被按下時,它將其保存,然後按加號或減號以及第二個數值即結果。如何爲具有相似功能的所有按鈕提供單一方法

我的想法是創建每個按鈕像這樣的方法:

public void number1(View view){ 
    value1 = value2; 
    value2 = 1; 
    displayValue(); 
} 

但沒有工作,還我重複了幾行其心不是很好的許多倍。那麼如何使用開關,或任何想法有一個單一的方法,並把它放在按鈕的所有android:onClick""

所以,如果你有任何想法只是解釋它或寫一個例子。 在此先感謝。

+0

你的onClick有一個'View'參數。這告訴你哪個視圖被點擊是的,在所有按鈕上使用一種方法。 – Simon

+0

這聽起來像你有如何使其工作的一些想法。你有嘗試過嗎?他們爲什麼或不爲你工作? –

+0

保持方法中的重複行,並調用該方法無處不在 –

回答

0

所以關於使用開關,

是的,你可以使用什麼switch聲明你的方法裏面,接通Buttonid點擊。像

public void someMethod(View v) 
{ 
    switch (v.getId())  // get the id of the View clicked 
    { 
     case R.id.idOfButton1:  // and compare it to your Button ids 
      // do stuff; 
      break; 
     case R.id.idOfButton2: 
      // do stuff; 
      break; 
     } 
     // put common code before or after switch statement 
} 

這裏v東西是Button點擊所以你得到它的ID,並進行比較。

任何想法有一個單一的方法,並把它放在所有android:onClick「」按鈕。

在XML中的每個Button添加該行

<Button 
    ... 
    android:onClick="someMethod"/> 

The Button Docs解釋這是如何工作的,並做這種方式卻相當簡單的相關規則。

+0

筆記,該XML'機器人:的onClick =」 someMethod「'不適用於'Fragment's,這限制了它的使用。 –

0

我真的建議你使用ButterKnife作爲最佳做法。您所要做的就是將@OnClick註釋與請求的id一起使用。在您的ActivityFragmentonCreate

@OnClick({ R.id.door1, R.id.door2, R.id.door3 }) 
public void pickDoor(DoorView door) { 
    if (door.hasPrizeBehind()) { 
     Toast.makeText(this, "You win!", LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "Try again", LENGTH_SHORT).show(); 
    } 
} 

,並注入這個觀點。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 
    Views.inject(this); 
} 

查看此site的其他示例。

+0

爲什麼使用外部庫的東西,Android框架已經內置函數/屬性? – codeMagic

+0

它可以節省打字時間並使您的代碼看起來更乾淨,這很好。它下面生成通常的android點擊監聽器。檢查網站,它有代碼比較的解釋。 –

+1

我已經瀏覽了網站,我只是不認爲在這種情況下,它會爲這個簡單的東西節省很多,Android已經有一個簡單的方法來做到這一點。它似乎並沒有添加庫和做所有這些將比使用框架compnents ebtter ...這只是我的意見。 – codeMagic

相關問題