两个按钮具有相同的“onClick” - Android

时间:2011-04-27 21:14:51

标签: java android

我正在尝试使用Android。最初我有这个:

original plan

我创建了一个名为“重置”的额外按钮。我使用布局表行连续排列它们,如下所示:

enter image description here

“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) {}
}

第一次尝试:

  1. (1)指定两个可点击的按钮 默认(来自属性) [main.xml中]
  2. (2)包含和不包含setText 第二个开关盒
  3. 结果:来自Android的错误消息 - >申请被迫停止

    第二次尝试:

    1. 将重置按钮的可点击属性指定为False
    2. 添加额外的 resetButton.isClickable()到 java源代码
    3. 有/无setText
    4. 结果:重置无效(我甚至无法点击     它。它似乎不是     可点击的!!)

      我真正的问题是如何让重置按钮工作。

      将两个按钮分配给相同的“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>
      

3 个答案:

答案 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属性,让您的两个按钮在您的活动中调用两个单独的方法。