我正在尝试使用Android。最初我有这个:
我创建了一个名为“重置”的额外按钮。我使用布局表行连续排列它们,如下所示:
“Calculate”已分配给字符串“clickHandler”,其clickable属性也分配给“clickHandler”。 我基本上在这里得到了这个教程 Tutorial site
到目前为止,我的代码看起来像这样
package ywong02.android.temperature;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;
import android.widget.Button;
public class Convert extends Activity {
/** Called when the activity is first created. */
private EditText text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (EditText)findViewById(R.id.editText1);
}
public void myClickHandler(View view){
RadioButton celsiusButton = (RadioButton)findViewById(R.id.radio0);
RadioButton fahrenheitButton = (RadioButton)findViewById(R.id.radio1);
Button resetButton = (Button)findViewById(R.id.button2);
switch(view.getId()){
case R.id.button1:
if(text.getText().length() == 0){
Toast.makeText(this, "Please enter a number to convert", Toast.LENGTH_LONG).show();
return;
}
float inputValue = Float.parseFloat(text.getText().toString());
// second attempt: make Reset button onClick to False initially
// resetButton.isClickable();
if(celsiusButton.isChecked()){
text.setText(String.valueOf(convertFahrenheitToCelsius(inputValue)));
}
else{
text.setText(String.valueOf(convertCelsiusToFahrenheit(inputValue)));
}
// switch to the other button
if(fahrenheitButton.isChecked()){
fahrenheitButton.setChecked(false);
celsiusButton.setChecked(true);
}
else {
fahrenheitButton.setChecked(true);
celsiusButton.setChecked(false);
}
break; // don't forget to break at each case!!!
case R.id.button2: // reset button
fahrenheitButton.setChecked(false);
celsiusButton.setChecked(true);
//text.setText("");
//text.setText(null);
break;
}
return;
}
private float convertFahrenheitToCelsius(float fahrenheit) {}
private float convertCelsiusToFahrenheit(float celsius) {}
}
第一次尝试:
结果:来自Android的错误消息 - >申请被迫停止
第二次尝试:
结果:重置无效(我甚至无法点击 它。它似乎不是 可点击的!!)
我真正的问题是如何让重置按钮工作。
将两个按钮分配给相同的“onClick”是错误的(在这种情况下,它被称为myclickHandler)??
如果上一个问题的答案为YES,那么我必须创建两个单独的类,一个处理重置,另一个处理计算按钮。我是对的吗?
谢谢!
更新(发布XML - 这个将两个按钮分配给Clickable(默认))
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/bgColor">
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal|numberSigned"></EditText>
<RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content">
<RadioButton android:text="@string/toCelsius" android:layout_width="wrap_content" android:id="@+id/radio0" android:checked="true" android:layout_height="wrap_content"></RadioButton>
<RadioButton android:text="@string/toFahrenheit" android:layout_width="wrap_content" android:id="@+id/radio1" android:layout_height="wrap_content"></RadioButton>
</RadioGroup>
<TableRow android:id="@+id/tableRow1" android:layout_width="match_parent" android:layout_height="wrap_content">
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:onClick="myClickHandler" android:text="@string/pressToCalc" android:layout_height="wrap_content"></Button>
<Button android:layout_height="wrap_content" android:id="@+id/button2" android:layout_width="wrap_content" android:onClick="myclickHandler" android:text="@string/clickToReset"></Button>
</TableRow>
</LinearLayout>
答案 0 :(得分:4)
基于你到目前为止所说的内容并基于我对你的编程技巧/对Java的理解我所知道的...我相信它无法工作的原因是因为你没有将你的重置按钮注册给听众,所以没有被倾听。
这只是猜测
<强>更新强>
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:onClick="myClickHandler" android:text="@string/pressToCalc" android:layout_height="wrap_content"></Button>
<Button android:layout_height="wrap_content" android:id="@+id/button2" android:layout_width="wrap_content" android:onClick="myclickHandler" android:text="@string/clickToReset"></Button>
这是敏感的!小心!!
你们每个人都没有相同的听众:
(Button1) android:onClick="myClickHandler"
(Button2) android:onClick="myclickHandler"
答案 1 :(得分:2)
根据你发布的内容......
重置按钮不起作用,因为switch语句没有捕获它。将ID分配给XML中的重置按钮,并在代码中添加重置按钮ID的大小写。
编辑:
对于button2,您点击处理程序方法的拼写不匹配。
答案 2 :(得分:1)
在我的活动的layout / main.xml中,我已经定义了一个按钮:
<Button
android:id="@+id/locate_button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/locate"
android:onClick="displayCurrentLocation" />
这会导致调用我的活动中的public void displayCurrentLocation(View view)
方法。我有其他按钮,其android:onClick
属性使他们在单击时调用此活动中的其他方法。因此,如果它对您有效,我建议您使用android:onClick
文件中的layout.xml
属性,让您的两个按钮在您的活动中调用两个单独的方法。