2014-10-28 93 views
0

我一直在試圖建立一個數學閃存卡應用程序,用戶輸入兩個數字,然後選擇一個按鈕,取決於它是否需要數字加,減或乘。三個按鈕OnClickListener Android應用

圖片:http://i.stack.imgur.com/83FdN.png

的問題似乎是OnClickListener。我創建了一個按鈕的其他項目,他們完美的工作,但有兩個按鈕,我不知道該怎麼做。

我曾嘗試:

我已將按鈕代碼取出並運行,然後運行。我不知道還有什麼要做。

這是我嘗試使用一個按鈕嘗試的最後一個代碼,應用程序仍然強制關閉。

public class MainActivity extends ActionBarActivity implements OnClickListener{ 

int num1, num2, total; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final EditText txtInt1 = (EditText)findViewById(R.id.txtInt1); 
    final EditText txtInt2 = (EditText)findViewById(R.id.txtInt2); 
    final TextView result = (TextView) findViewById(R.id.txtResult); 

    num1 = Integer.parseInt(txtInt1.getText().toString()); 
    num2 = Integer.parseInt(txtInt2.getText().toString()); 

    final Button btnAddition = (Button) findViewById(R.id.btnAddition); 
    Button btnSubstraction = (Button) findViewById(R.id.btnSubstraction); 
    Button btnMultiplication = (Button) findViewById(R.id.btnMultiplication); 
    /* 
    btnSubstraction.setOnClickListener(this);  
    btnAddition.setOnClickListener(this); 
    btnMultiplication.setOnClickListener(this); */ 

    btnAddition.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (v == btnAddition){ 

       if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20){ 
        Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20", 
          Toast.LENGTH_SHORT).show(); 
       } 
       else { 
        total = num1+num2; 
        result.setText(num1+" + "+num2+" = "+total); 
       } 
      } 

     } 
    }); 

謝謝!

+2

因此,當您點擊'btnAddition'時,您發佈的代碼什麼也不做?我很困惑。 「onClick」的所有實現都可以工作,因此您需要現在選擇一個,並告訴我們如果崩潰,錯誤消息將會發生什麼。 – codeMagic 2014-10-28 18:04:06

+2

爲崩潰添加錯誤日誌 – 2014-10-28 18:04:52

+0

爲什麼你需要最終的修飾符? – 2014-10-28 18:15:24

回答

1

最好將它們移動到單個OnClick代碼塊。 檢查v.getId()是否是按鈕ID。 通過改變代碼

btnSubstraction.setOnClickListener(this);  
btnAddition.setOnClickListener(this); 
btnMultiplication.setOnClickListener(this); 
} 

@Override 
    public void onClick(View v) { 
     if (v.getId() == R.id.btnAddition){ 

      if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20){ 
       Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20", 
         Toast.LENGTH_SHORT).show(); 
      } 
      else { 
       total = num1+num2; 
       result.setText(num1+" + "+num2+" = "+total); 
      } 
     } 


    } 
}); 
+0

僅有代碼的答案通常是SO上的低質量。你應該解釋*你已經改變了什麼*以及爲什麼它應該工作 – codeMagic 2014-10-28 18:17:05

+0

@codeMagic我認爲他爲每個按鈕創建了一個setONClickListener實例,然後爲所有按鈕使用onClick視圖。它沒有爲我工作,但我使用'v == btnAddition'而不是'v.getId()== R.id.btnAddition'。我現在就試試這個,謝謝! – baldemora 2014-10-29 22:50:46

+0

使用其他按鈕的情況下(減法和乘法) – 2014-10-30 06:43:40

0

您是否嘗試設置日誌嘗試?你可以這樣做: Log.e(「TAG」,「MSG」);

然後,您可以觀看LogCat並搜索錯誤! ;)

我會實現其他按鈕完全像你做你的第一個匿名內部類。

btnSubstraction.setOnClickListener(new OnCLickListener() { 
    @Override 
    public void onClick(View v){ 
     Your Code goes here or u trigger another Method for readability for example: 
     Substraction(); 

     ... 

你應該留意按鈕的ID: R.findViewById ...

但你不就算你觸發的onClick上buttonobject需要這個。 ;) 是的,我想這是它,嘗試離開:

if(v==btnAddition) 

該系統已經通過在buttonObject引發的onClick知道這一點。

所以,你的代碼應該是這樣的:

btnAddition.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20){ 
       Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20", 
         Toast.LENGTH_SHORT).show(); 
      } 
      else { 
       total = num1+num2; 
       result.setText(num1+" + "+num2+" = "+total); 
      } 
     } 
    } 
}); 

btnSubstraction.setOnClickListener(new OnCLickListener() { 
     @Override 
     public void onClick(View v){ 
     //Substractioncode here 
     } 
}); 
1

既然要實現OnClickListener,需要你有重寫方法的onClick(查看ARG)。通過使用開關,您可以爲每個想要點擊動作的按鈕設置個案。下面是步驟

1)按鈕控件實例化後:設置onClickListener每個按鈕控件

btnSubstraction.setOnClickListener(this);  
btnAddition.setOnClickListener(this); 
btnMultiplication.setOnClickListener(this); 

2)中的onClick創建您的案件()方法:確保這是你的onCreate之外( )

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.btnAddition: 
     // do some action for addition 
     break; 
    case R.id.btnSubstraction: 
     // do some action for substraction 
     break; 
    case R.id.btnMultiplication: 
     // do some action for multiplication 
     break; 
    default: 
     break; 
    } 
} 

3)請確保您實現OnClickListener

有關按鈕的一個偉大的教程,你應該看看http://ljtatum.blog.com/buttons/。您可以下載免費的示例代碼。但是我上面發佈的內容會適合你。乾杯!

+0

嘿,謝謝你的回答我一直在努力但它一直說onClick不能接受無效。我知道這是錯誤的,但即使使用你的鏈接,我仍然無法弄清楚。 – baldemora 2014-11-04 16:18:29

+0

看看我編輯的響應 – portfoliobuilder 2014-11-04 19:01:11

+0

我需要在onCreate bundle savedInsance之外添加onClick方法嗎?因爲我試過了,它說重複的方法。 – baldemora 2014-11-09 21:25:32

0

什麼DaveS。的意思是,你可能在這兩條線

num1 = Integer.parseInt(txtInt1.getText().toString()); 
num2 = Integer.parseInt(txtInt2.getText().toString()); 

因爲onCreate()他們還沒有被賦予值,這樣你會得到一個NumberFormatException這些都應該被移到onClick()得到一個例外onCreate()。你也應該做一些錯誤檢查,如

try { 
    num1 = Integer.parseInt(txtInt1.getText().toString()); 
    num2 = Integer.parseInt(txtInt2.getText().toString()); 
} catch (NumberFormatException e) { 
    // log the error and possibly print a message to the user 
} 

你應該總是發表您的堆棧跟蹤,當你的應用程序崩潰,所以我們可以很容易地找到了答案。您發佈的代碼的問題不是由於您設置OnClickListener的方式,這正是您所指示的。

This SO answer顯示如何爲Buttons設置OnClickListener。所有這些都可以正常工作,因此您可以決定哪種最適合您。

0

您正在嘗試getText並將其轉換爲intonCreate()。在onCreate()你會得到""這是一個空字符串而你試圖轉換它,你會得到一個NumberFormatException。解決方法是把這兩個裏面的onClick方法按鈕

num1 = Integer.parseInt(txtInt1.getText().toString()); 
num2 = Integer.parseInt(txtInt2.getText().toString()); 
相關問題