我有一个问题,就是设置一个侦听器,它会根据点击的按钮执行不同的操作。
编译器没有检测到语法上的任何错误,但问题是当我在模拟器上模拟我的应用程序时,会弹出窗口询问“强制关闭”。
这是我的Java文件:
package tp.imc.namespace;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class IMCCalculatorActivity extends Activity {
EditText poids,taille;
Button boutton1,boutton2;
TextView text1;
Boolean k=true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
poids=(EditText) findViewById(R.id.poids);
taille=(EditText) findViewById(R.id.taille);
boutton1 =(Button) findViewById(R.id.boutton1);
text1=(TextView) findViewById(R.id.text1);
boutton1.setOnClickListener(clicker);
boutton2.setOnClickListener(clicker);
}
// declare a OnClickListener that will execute different actions
// depending on the view that was clicked
View.OnClickListener clicker = new View.OnClickListener(){
public void onClick (View v){
if( v == boutton1 )
{
String a,b;
Double r;
a=poids.getText().toString();
b=taille.getText().toString();
Double zero=Double.parseDouble(b);
a=poids.getText().toString();
b=taille.getText().toString();
if (zero==0)
{
text1.setText("Erreur ! Division par 0.");
}
else {
r=(Double.parseDouble(a))/(Double.parseDouble(b)*Double.parseDouble(b));
if (r<16.5) text1.setText("Famine.");
else if (r>16.5 && r<18.5) text1.setText("Maigreur.");
else if (r>=18.5 && r<25) text1.setText("Coplulence nomrale.");
else if (r>=25 && r<30) text1.setText("Surpoids.");
else if (r>=30 && r<35) text1.setText("Obésité modérée.");
else if (r>=35 && r<40) text1.setText("Obésité sévère.");
else if (r>=40) text1.setText("Obésité morbide ou massive.");
}
}
else if( v == boutton2 )
{
poids.setText("");
taille.setText("");
text1.setText("");
}
}
};
}
这是我的XML文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/poids"
android:textColor="#FF0000"
android:gravity="center"
/>
<EditText
android:id="@+id/poids"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/poids"
android:lines="1"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/taille"
android:textColor="#FF0000"
android:gravity="center"
/>
<EditText
android:id="@+id/taille"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/taille"
android:lines="1"
/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/metre"
/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/centimetre"
/>
</RadioGroup>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/mega"
android:checked="false"
/>
<Button
android:id="@+id/boutton1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/compute" />
<Button
android:id="@+id/boutton2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/raz" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/resultat"
/>
<TextView
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/text"
/>
</LinearLayout>
答案 0 :(得分:4)
您没有定义boutton2
,它是null。加上这个:
boutton2 = (Button) findViewById(R.id.boutton2);
boutton2.setOnClickListener(clicker);
由于boutton1
和boutton2
之间没有公共代码,因此您只需创建两个不同的侦听器。
最后,这条线看起来不正确。
if( v == boutton1 )
您正在尝试将视图与按钮进行比较,这可能不起作用。试试这个:
if( v.getId() == boutton1.getId() )