2015-07-19 92 views
2

我想製作一個應用程序,以英尺和英寸爲單位輸入,並計算每英尺成本,並計算杆的成本。這是一個非常簡單的應用程序,我完成了大部分工作,但是當我點擊計算Button,取代「結果」時,我的答案應該到來。Android按鈕無法使用?

現在這裏是XML代碼:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="@string/ft" 
    android:id="@+id/feet" 
    android:layout_marginTop="41dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<EditText 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/feet1" 
    android:layout_alignBottom="@+id/feet" 
    android:layout_toRightOf="@+id/feet" 
    android:inputType="text" /> 

<EditText 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/inches" 
    android:layout_alignBottom="@+id/feet" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:inputType="text" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="@string/in" 
    android:id="@+id/Inches" 
    android:layout_alignBottom="@+id/feet" 
    android:layout_toLeftOf="@+id/inches" 
    android:layout_toStartOf="@+id/inches" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="@string/cost" 
    android:id="@+id/cost" 
    android:layout_marginTop="60dp" 
    android:layout_below="@+id/feet" 
    android:layout_toRightOf="@+id/feet" 
    android:layout_toEndOf="@+id/feet" /> 

<EditText 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/calcost" 
    android:layout_alignBottom="@+id/cost" 
    android:layout_toRightOf="@+id/cost" 
    android:layout_toEndOf="@+id/cost" 
    android:inputType="text" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/cal" 
    android:id="@+id/calculate" 
    android:layout_below="@+id/cost" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="73dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="@string/ans" 
    android:id="@+id/result" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="123dp" /> 

這裏是Java代碼:

package com.example.baqir.saecost; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 


public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
public void add(View v) 
{ 
    RelativeLayout rel= (RelativeLayout) findViewById(R.id.rel); 
    final TextView result= (TextView)findViewById(R.id.result); 
    EditText et1= (EditText)findViewById(R.id.feet1); 
    EditText et2= (EditText) findViewById(R.id.inches); 
    EditText ct= (EditText)findViewById(R.id.calcost); 
    final double a=Double.parseDouble(String.valueOf(et1.getText())); 
    final double b=Double.parseDouble(String.valueOf(et2.getText())); 
    final double c=Double.parseDouble(String.valueOf(ct.getText())); 
    final Button button = (Button) findViewById(R.id.calculate); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View g) { 
       double i; 
       i=(a+(b/12))*c; 
      result.setText(i+" Rs"); 
      } 
    }); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.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(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

+0

你的代碼看起來在當創建活動的文本框中的值,而不是當按下按鈕。 – immibis

+0

我不能看到他給出的代碼給你添加電話的地方() –

+0

加上使用Button類的InClickListener而不是視圖類! –

回答

3

常你e這樣的代碼:

public void add(View v) 
{ 
    RelativeLayout rel= (RelativeLayout) findViewById(R.id.rel); 
    final TextView result= (TextView)findViewById(R.id.result); 
    EditText et1= (EditText)findViewById(R.id.feet1); 
    EditText et2= (EditText) findViewById(R.id.inches); 
    EditText ct= (EditText)findViewById(R.id.calcost); 
    final double a=Double.parseDouble(String.valueOf(et1.getText())); 
    final double b=Double.parseDouble(String.valueOf(et2.getText())); 
    final double c=Double.parseDouble(String.valueOf(ct.getText())); 
    final Button button = (Button) findViewById(R.id.calculate); 
    // button.setOnClickListener(new View.OnClickListener() { 
    // public void onClick(View g) { 
       double i; 
       i=(a+(b/12))*c; 
      result.setText(i+" Rs"); 
    //   } 
    // }); 
} 

,並在您XML更改添加onClick,如:

<Button 
    android:onClick="add" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/cal" 
    android:id="@+id/calculate" 
    android:layout_below="@+id/cost" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="73dp" /> 
+0

謝謝,它的工作原理與我希望它的工作方式完全相同。但是,你能告訴我,爲什麼你在JAVA中評論這個小代碼?我的按鈕如何知道它何時被點擊以及何時設置文本,因爲您已經刪除了onClickListener。我是初學者,所以如果你能在我不需要關於這個主題的更多幫助的方式解釋我,那將是非常好的,你:) –

+0

看看XML文件,「添加」功能被稱爲每當按鈕被點擊。因此,點擊按鈕後,將會執行整個add(View v)功能塊。 – Kasra

2

我知道了你的問題,只是添加此行XML佈局在您Button

android:onClick="add" 
2
public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    RelativeLayout rel= (RelativeLayout) findViewById(R.id.rel); 
    final TextView result= (TextView)findViewById(R.id.result); 
    EditText et1= (EditText)findViewById(R.id.feet1); 
    EditText et2= (EditText) findViewById(R.id.inches); 
    EditText ct= (EditText)findViewById(R.id.calcost); 
    final double a=Double.parseDouble(String.valueOf(et1.getText())); 
    final double b=Double.parseDouble(String.valueOf(et2.getText())); 
    final double c=Double.parseDouble(String.valueOf(ct.getText())); 
    final Button button = (Button) findViewById(R.id.calculate); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View g) { 
       double i; 
       i=(a+(b/12))*c; 
       result.setText(i+" Rs"); 
     } 
    }); 
} 
} 

刪除方法並在oncreate方法中編寫代碼。

1
package com.example.baqir.saecost; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 


public class MainActivity extends ActionBarActivity { 

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

    RelativeLayout rel= (RelativeLayout) findViewById(R.id.rel); 
    final TextView result= (TextView)findViewById(R.id.result); 
    EditText et1= (EditText)findViewById(R.id.feet1); 
    EditText et2= (EditText) findViewById(R.id.inches); 
    EditText ct= (EditText)findViewById(R.id.calcost); 



    final Button button = (Button) findViewById(R.id.calculate); 


    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View g) { 
      double i; 

      final double a=Double.parseDouble(String.valueOf(et1.getText())); 
      final double b=Double.parseDouble(String.valueOf(et2.getText())); 
      final double c=Double.parseDouble(String.valueOf(ct.getText())); 

      i=(a+(b/12))*c; 
      result.setText(i+" Rs"); 
     } 
    }); 

} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.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(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

只要XML文件是確定(在ID是你實際使用的,而不是混淆或任何東西),這應該解決您的問題。

你服用從editTexts值按下按鈕前...所以實際上,你寫的有什麼之後,這是抓住了數值的代碼,已經執行。

0

初始化您在onCreate方法的所有視圖它應該工作