簡體   English   中英

android java setOnClickListener錯誤

[英]android java setOnClickListener error

當按下 btnExecute 時,我正在嘗試執行例程。 我在每個 onClick btnxxx.setOnClickListener 收到一個錯誤,指出“新的 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
        }
    });

您的進口清單不包括android.view.View ,只是android.view.View.OnClickListener 在不了解作為onClick()參數的View object 的情況下,編譯器無法解析實現已完成。 就個人而言,我會通過以下方式解決它:

  1. 將導入從android.view.View.OnClickListener更改(不添加)到android.view.View
  2. 更新您的聲明作為公民 conn 提到。

我相信你也可以這樣做:

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 function,像這樣:

@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;
    }
}

我認為這是一種更簡潔的方法,嵌套函數更少。

嘗試這個

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

首先導入以下package:

import android.view.View.OnClickListener;

然后像這樣更改以下內容:

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
}

在這種情況下,在 XML 文件中設置 OnClick 可能是更好的方法。

Select 在您的 XML 布局文件中具有 onClickListener 的 3 個按鈕。 右鍵單擊它 > 屬性 > OnClick 並為 3 個按鈕為 OnClick 命名(例如 onClickButtons)。 因此,在您的 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;
}

}

並讓您的 class 實現 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();

問候並有良好的發展!

用這個:

button1.setOnClickListener((OnClickListener) this);

不要使用這個:

button1.setOnClickListener(this);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM