package bmi.com.oppo.www;import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
import android.view.View;
import android.view.View.OnClickListener;
import java.text.DecimalFormat;
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 button clicks
        Button button = (Button)findViewById(R.id.submit);
        button.setOnClickListener(calcBMI);
    }
    private OnClickListener calcBMI = new OnClickListener(){
         public void onClick(View v){
     DecimalFormat nf = new DecimalFormat("0.00");
     EditText fieldheight = (EditText)findViewById(R.id.height);
     EditText fieldweight = (EditText)findViewById(R.id.weight);
     double height = Double.parseDouble(fieldheight.getText().toString())/100;
     double weight = Double.parseDouble(fieldweight.getText().toString());
     double BMI = weight/(height*height);
     //result
     TextView result = (TextView)findViewById(R.id.result);
     result.setText("your BMI is : " + BMI/*nf.format(BMI)*/);
     //suggest
     TextView suggest = (TextView)findViewById(R.id.suggest);
     if(BMI > 25)
     suggest.setText(R.string.advice_heavy);
     else if(BMI < 20)
     suggest.setText(R.string.advice_light);
     else 
     suggest.setText("ok");
     }
    };
}
这个是Android的一段代码,
private OnClickListener calcBMI = new OnClickListener(){
         public void onClick(View v){
    }
}
这个是怎么理解的,是不是创建了OnClickListener类的一个对象calcBMI ?后面的括号里面的内容算什么?里面的方法onClick呢?

解决方案 »

  1.   

    创建了一个匿名内部类,OnClickListener 类或接口的子类,onClick方法是对OnClickListener中同名方法的覆盖,实现多态调用。
      

  2.   

    我把代码改了一下 你看下,是不是和匿名内部类处理事件的代码很类似?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 button clicks
            Button button = (Button)findViewById(R.id.submit);
            button.setOnClickListener(new OnClickListener(){
                public void onClick(View v){
                DecimalFormat nf = new DecimalFormat("0.00");
                EditText fieldheight = (EditText)findViewById(R.id.height);
                EditText fieldweight = (EditText)findViewById(R.id.weight);
                double height = Double.parseDouble(fieldheight.getText().toString())/100;
                double weight = Double.parseDouble(fieldweight.getText().toString());
                double BMI = weight/(height*height);
                //result
                TextView result = (TextView)findViewById(R.id.result);
                result.setText("your BMI is : " + BMI/*nf.format(BMI)*/);
                //suggest
                TextView suggest = (TextView)findViewById(R.id.suggest);
                if(BMI > 25)
                    suggest.setText(R.string.advice_heavy);
                else if(BMI < 20)
                    suggest.setText(R.string.advice_light);
                else 
                    suggest.setText("ok");
            }
        };
    );
    }
      

  3.   

    OnClickListener 是一个接口:    public interface OnClickListener {
            /**
             * Called when a view has been clicked.
             *
             * @param v The view that was clicked.
             */
            void onClick(View v);
        }
      

  4.   

    对啊 和ActionListener接口一样
      

  5.   

    private OnClickListener calcBMI = new OnClickListener(){
            public void onClick(View v){
        }
    } new一个匿名实现类赋值给OnClickListener 接口引用calcBMI 
      

  6.   

    就是实例化一个OnClickListener 的实现类,这个类没有名子,也叫匿名类
      

  7.   

    匿名实现类,和swing中添加一个监听事件道理一样
    new AcationListener(){
       需要实现actionPerformed方法一样
    }