实现按钮点击响应事件的问题?1)Button button = (Button)findViewById(R.id.submit)这个类型转换,一旦submit不是按钮,而是其它类型控件(确实存在)。这种强制类型转换,岂非风险很大?有没有更安全的类型转换方法?2)如何实现按钮点击响应事件?3)如何打个trace?这些trace是输出在哪看到?仅是模拟器上看到吗?还是手机上也能看到?
package com.demo.android.bmi;import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;public class Bmi extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        //listen for buttons click
        Button button = (Button)findViewById(R.id.submit);
        if (null != button)
        {
         button.setOnClickListener(calcBMI);
        }
        else
        {
         //此如何写个trace("button指针为空!")?
        }
    }
}//此如何写个button的点击响应函数calcBMI?
class calcBMI
{

}

解决方案 »

  1.   

    calcBMI  实现OnClickListener    OK    
      

  2.   

    应该有instansof之类的看是否是某个类型的实例;
    button的点击事件响应是用Listner实现的,就是实现相应的接口,然后设置给BUtton就行了.
      

  3.   

    1.既然你知道强制转换存在问题。那就两个view不要用一个id标示。
    2.button.setOnClickListener(new OnClickListener{
          public void onClick(View view){
           // 处理案件响应事件
    }
    });
    3.track,给你个网址自己看吧。http://blog.csdn.net/xiaominghimi/archive/2010/12/29/6105212.aspx
      

  4.   

    下面附的代码运行了,但Log一点都看不到。所以,都不知代码是不是运行成功了。要怎么样才能看到这些log?package com.demo.android.bmi;import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;public class Bmi extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            //listen for buttons click
            Log.v("calcBMI", "listen");
            Button button = (Button)findViewById(R.id.submit);
            if (null != button)
            {
             Log.v("calcBMI", "button is found");
                button.setOnClickListener(new Button.OnClickListener() {
    @Override
    public void onClick(View arg0)
    {
    Log.v("calcBMI", "clicked");
    }
                });
            }
            else
            {
             Log.v("calcBMI", "button is null");
            }     
        }
    }
      

  5.   

    03-25 14:40:49.179: VERBOSE/calcBMI(324): clicked
    呵呵!终于看到了log。
      

  6.   

    代码实现了按钮点击响应事件,log也能正常输出与显示了。感觉eclipse还是很智能的,像java.text.DecimalFormat头文件都是自动加入的。java对被除数为零的情况,程序并没有崩,反而能显示出横8的无穷大符号,真是有些神奇!不过,对于edit控件,没有任何输入的情况下,了。fieldheight.getText().toString()还是有些问题的,似乎事先得预判下空的情况。原以为,java没有了指针的概念,崩的情形规避了很多,现在看来,还是许多地方会发生的。附代码如下:
    package com.demo.android.bmi;import java.text.DecimalFormat;import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;public class Bmi extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            //listen for buttons click
            Button button = (Button)findViewById(R.id.submit);
            if (null != button)
            {
             Log.v("tip", "button is found");
                button.setOnClickListener(calcBMI);
            }
            else
            {
             Log.v("tip", "button is null");
            }
        }
        
        class submitListenner implements OnClickListener
        {
         @Override
         public void onClick(View arg0)
         {
         Log.v("submit onClick : ", "begin");
         DecimalFormat nf = new DecimalFormat("0.00");
         EditText fieldheight = (EditText)findViewById(R.id.height);
         EditText fieldweight = (EditText)findViewById(R.id.weight);
         Log.v("height : ", fieldheight.getText().toString());
         Log.v("weight : ", fieldweight.getText().toString());
         double height = Double.parseDouble(fieldheight.getText().toString())/100;
         double weight = Double.parseDouble(fieldweight.getText().toString());    
         double BMI = weight / (height * height);
         TextView result = (TextView)findViewById(R.id.result);
         result.setText("You BMI is " + nf.format(BMI));
        
         //Give health advice
         TextView fieldsuggest = (TextView)findViewById(R.id.suggest);
         if (BMI > 25)
         {
         fieldsuggest.setText(R.string.advice_heavy);
         }
         else if (BMI < 20)
         {
         fieldsuggest.setText(R.string.advice_light);
         }
         else
         {
         fieldsuggest.setText(R.string.advice_average);
         }
         Log.v("submit onClick : ", "end");
         }
        }    private submitListenner calcBMI = new submitListenner();
    }