android java setOnClickListener错误

android java setOnClickListener错误,java,android,Java,Android,按下btnExecute时,我正在尝试执行一个例程。我在每次onClick btnxxx.setOnClickListener时都会收到一个错误,声明“类型new View.OnClickListener(){}必须实现继承的抽象方法View.OnClickListener.onClick(View)。请帮助我了解错误 package com.androidbook.triviaquiz8; import android.os.Bundle; import android.os.Environ

按下btnExecute时,我正在尝试执行一个例程。我在每次onClick btnxxx.setOnClickListener时都会收到一个错误,声明“类型new View.OnClickListener(){}必须实现继承的抽象方法View.OnClickListener.onClick(View)。请帮助我了解错误

package com.androidbook.triviaquiz8;

import android.os.Bundle;
import android.os.Environment;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;

public class QuizHelpActivity extends QuizActivity {
    private EditText m1_sqs1;
    private EditText m1_rs1;
    private EditText m1_rs2;
    private EditText m1_cd;
    private EditText m1_els1;
    private EditText m1_els2;

    private EditText m1_sa_in;
    private EditText m1_sa_ft;
    private EditText m1_sa_mm;
    private EditText m1_sa_m;

    private EditText m1_ed_in;
    private EditText m1_ed_ft;
    private EditText m1_ed_mm;
    private EditText m1_ed_m;

    private Spinner m1_sqs1_spinner;
    private Spinner m1_rs1_unit;
    private Spinner m1_rs2_unit;
    private Spinner m1_cd_unit;
    private Spinner m1_els1_unit;
    private Spinner m1_els2_unit;

    private QuizHelpActivity mContext;

    private Button btnSave;
    private Button btnClear;
    private Button btnExecute;


    // 
    // onCreate - let the fun begin!
    // 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        setContentView(R.layout.help);

        m1_sqs1 = (EditText) findViewById(R.id.m1_sqs1);
        m1_rs1 = (EditText) findViewById(R.id.m1_rs1);
        m1_rs2 = (EditText) findViewById(R.id.m1_rs2);
        m1_cd = (EditText) findViewById(R.id.m1_cd);
        m1_els1 = (EditText) findViewById(R.id.m1_els1);
        m1_els2 = (EditText) findViewById(R.id.m1_els2);

        m1_sa_in = (EditText) findViewById(R.id.m1_sa_in);
        m1_sa_ft = (EditText) findViewById(R.id.m1_sa_ft);
        m1_sa_mm = (EditText) findViewById(R.id.m1_sa_mm);
        m1_sa_m = (EditText) findViewById(R.id.m1_sa_m);

        m1_ed_in = (EditText) findViewById(R.id.m1_ed_in);
        m1_ed_ft = (EditText) findViewById(R.id.m1_ed_ft);
        m1_ed_mm = (EditText) findViewById(R.id.m1_ed_mm);
        m1_ed_m = (EditText) findViewById(R.id.m1_ed_m);

        // Create an OnClick Event in each button.

        Button btnExecute = (Button) findViewById(R.id.btnExecute);
        Button btnSave = (Button) findViewById(R.id.btnSave);
        Button btnClear = (Button) findViewById(R.id.btnClear);

        btnSave.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
            }
        });
        btnClear.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
            }
        });
        btnExecute.setOnClickListener(new OnClickListener() {
            private AlertDialog show;

            public void onClick(View arg0) {
                if ((m1_sqs1.getText().length() == 0)
                        || (m1_sqs1.getText().toString() == " ")) {
                    show = new AlertDialog.Builder(mContext).setTitle("Error")
                            .setMessage("The Square Side length is empty")
                            .setPositiveButton("OK", null).show();
                } else if (operator.getText().equals("")) {
                    show = new AlertDialog.Builder(mContext).setTitle("Error")
                            .setMessage(" is null").setPositiveButton(
                                    "OK", null).show();
                }
                {
                    double m1_sa_in = new Double(m1_sqs1.getText().toString())
                            * new Double(m1_sqs1.getText().toString());
                    m1_sa_in.setText(Double.toString(m1_sa_in));
                }
            }
        }
你在哪里

btnSave.setOnClickListener(new OnClickListener() {   
换成

btnSave.setOnClickListener(new View.OnClickListener() {   
这只是一种更新的方式,所以如果你正在关注一篇旧的教程或博客文章,这就是为什么它会过时的原因

编辑:

import android.view.View.OnClickListener;

View view = findViewById(android.R.id.content);
    view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // do something
        }
    });
试试这个

btnSave.setOnClickListener(new OnClickListener() {                           
            public void View.OnclickListener.onClick(View arg0) {
                }
            });

您的导入列表不包括
android.view.view
,只包含
android.view.view.OnClickListener
。如果不知道
view
对象是
onClick()
的一个参数,编译器无法确定实现是否完成。就我个人而言,我将通过以下方式修复它:

  • 将导入从
    android.view.view.OnClickListener更改(不添加)为
    android.view.view
  • 将您的声明更新为公民康涅狄格州

  • 在这种情况下,在XML文件中设置OnClick可能是更好的方法

    在XML布局文件中选择具有OnClick Listener的3个按钮。右键单击它>属性>OnClick,并为这3个按钮命名OnClick(例如OnClick按钮)。因此,在java代码中,可以执行以下操作:

    public void onClickButtons(View v) {
    switch (v.getId()) {
    case R.id.R.id.btnExecute:
        ...
        break;
    case R.id.btnSave:
        ...
        break;
    case R.id.btnClear:
        ...
        break;
    }
    
    btnSave.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        }
    
    });
    
    }

    并让您的类实现OnClickListener

    对于您的AlerDialog,这是处理此问题的更好方法:

    new AlertDialog.Builder(this)
    .setTitle("Error")
    .setMessage("is null")
    .setCancelable(false)
    .setPositiveButton(
        "OK", new DialogInterface.OnClickListener() {
    
                public void onClick(DialogInterface dialog, int which) {
    
    
                }
            })
        .show();
    

    欢迎您,祝您发展顺利!

    我相信您也可以做到这一点:

    public class QuizHelpActivity extends QuizActivity implements OnClickListener {
    
    添加实现OnClickListener将允许您使用。例如,在onCreate中,您可以:

        Button btnExecute   = (Button) findViewById(R.id.btnExecute);
        Button btnSave      = (Button) findViewById(R.id.btnSave);
        Button btnClear     = (Button) findViewById(R.id.btnClear);
    
        btnSave.setOnClickListener(this);
        btnClear.setOnClickListener(this);
        btnExecute.setOnClickListener(this);
    
    然后可以在onCreate之后实现onClick函数,如下所示:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // the rest of your onCreate, including buttons
    }
    
    public void onClick(View v) {
        switch(v.getId()) {
          case R.id.btnExecute:
              // reference a function that would house your current onClick behavior, such as:
              execute();
              break;
          case R.id.btnSave:
              break;
          case R.id.btnClear:
              break;
        }
    }
    

    我认为这是一种更干净的方法,嵌套函数更少。

    首先导入以下包:

    import android.view.View.OnClickListener;
    
    然后像这样更改以下内容:

    public void onClickButtons(View v) {
    switch (v.getId()) {
    case R.id.R.id.btnExecute:
        ...
        break;
    case R.id.btnSave:
        ...
        break;
    case R.id.btnClear:
        ...
        break;
    }
    
    btnSave.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        }
    
    });
    
    你可以把这个放进去

    public class MainActivity2 extends Activity implements View.OnClickListener{
    Button B2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        B2=(Button) findViewById(R.id.BM2);
        B2.setOnClickListener(this);
    
    }
    
    @Override
    public void onClick(View v) {
    // Do anything
    }
    
    使用以下命令:

    button1.setOnClickListener((OnClickListener)this);
    
    不要使用以下方法:

    button1.setOnClickListener(此);
    
    Rasel,这似乎没有改变任何东西。我做了此更改,但仍然得到一个错误,即此行的多个标记-视图无法解析为类型-类型视图中的方法setOnClickListener(View.OnClickListener)不适用于参数(new OnClickListener(){})编辑我的答案-确保您的导入声明准确无误。