2014-03-25 50 views
2

看起來我很接近,但我很想念這件事。我想創建一個小費計算器,您可以在其中輸入原始賬單的金額,然後單擊一個計算您的小費的%按鈕(10,15或20),並將其放入TextView字段中,該字段代表您的總賬單(稱爲finalBill )添加了提示。如何從計算字符串中的文本到TextView字段?

但我嘗試使用finalBill.setText(finalB.getText());,但我得到一個錯誤,說getText()是未定義的。我現在只設置了10%的按鈕,但是一旦我理解正確,我會將這些代碼應用於15和20種方法。

原始賬單將由用戶以double形式輸入(儘管它在EditText字段中),計算(在10%按鈕中)需要在雙打時發生,最終賬單應該是String或一些文本(?),以便它可以填充名爲finalBill的TextView字段。請儘量使用原始代碼,因爲我是初學者,容易混淆。謝謝你的幫助!

package com.example.nonitips; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    public EditText originalBill; 
    public double billWithTip; 
    String billString; 
    public TextView finalBill; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     originalBill = (EditText)findViewById(R.id.originalBill); 
    } 

    public void onTen (View v) { 
     Toast.makeText(this, "Tipping at 10%", Toast.LENGTH_SHORT).show(); 

     originalBill.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       double bill = Double.parseDouble(originalBill.getText().toString()); 
       billWithTip = (bill * 0.10) + bill; 
       String billString = String.valueOf(billWithTip); 
       finalBill = (TextView)findViewById(R.id.finalBill); 
       finalBill.setText(billString.getText()); 
      } 
     }); 

    } 

    public void onFifteen (View v) { 
     Toast.makeText(this, "Tipping at 15%", Toast.LENGTH_SHORT).show(); 
    } 

    public void onTwenty (View v) { 
     Toast.makeText(this, "Tipping at 20%", Toast.LENGTH_SHORT).show(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

} 
+1

爲什麼你做「billString.getText()」,billString本身就是一個字符串,直接使用它。 –

+0

謝謝你指出。 – Azurespot

回答

1

所以,你試圖使用一個字符串,如果它是一個TextView:

finalBill.setText(billString.getText()); 

,但這是錯誤的。

這是正確的:

finalBill.setText(billString); 

還有另外一個問題:你重新聲明billString:

String billString = String.valueOf(billWithTip); 

但是你已經在開始

String billString; 

因此宣稱,這就夠了:

billString = String.valueOf(billWithTip); 

和...適用10%,這是一個矯枉過正:

billWithTip = (bill * 0.10) + bill; 

你只需要這麼做:

billWithTip = bill * 1.10; 

多:

的onclick監聽器未分配給按鈕...分配給EditText:

originalBill.setOnClickListener(new View.OnClickListener() { 
// ... 

和originalBill確實是一個EditText:

public EditText originalBill; 
// ... 
originalBill = (EditText)findViewById(R.id.originalBill); 

所以,讓我假設你有一個在你的佈局被稱爲btnTenPct按鈕:

這樣做:

public Button btnTenPct; 
// ... 
btnTenPct = (Button) findViewById(R.id.btnTenPct); 
// ... 
btnTenPct.setOnClickListener(new View.OnClickListener() { 
// ... 
+0

感謝Vyger,你的意思是.getText()方法只適用於TextView變量?這就是爲什麼它不工作,因爲billString是一個字符串? – Azurespot

+1

是的,正確的。字符串沒有getText方法。必須使用「原樣」 –

+0

謝謝,我現在改變了它,但是當我單擊10%按鈕時,新計算的文本沒有出現在TextView字段中,儘管我不知道爲什麼。 – Azurespot

2
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     originalBill = (EditText)findViewById(R.id.originalBill); 
     Button btnTen = (Button) findViewById(R.id.buttonTenPer); // where your layout has a button with an id "buttonTenPer" 
     btnTen.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       double bill = Double.parseDouble(originalBill.getText().toString()); 
       billWithTip = (bill * 0.10) + bill; 
       String billString = String.valueOf(billWithTip); 
       finalBill = (TextView)findViewById(R.id.finalBill); 
       finalBill.setText(billString); 
      } 
     }); 
    } 
+0

謝謝,錯誤消失了,但它沒有出現在TextView字段中,當我點擊10%按鈕...我不知道爲什麼。 – Azurespot

+0

您已將onclicklistener添加到您的編輯文本中,您的按鈕在哪裏定義? –

+0

該按鈕是onTen方法。收聽者位於用戶首先輸入賬單金額的原始賬單字段中。和10%是...天哪你是對的,按鈕的實際ID被稱爲btnTen,但我沒有在onTen方法中使用它....我怎麼把它掛鉤?該按鈕應該有聽衆嗎? – Azurespot

相關問題