2014-03-25 51 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

相关问题