2011-07-18 70 views
2

我想按btnExecute時執行例程。我會在每一個的onClick btnxxx.setOnClickListener聲明「之類的新View.OnClickListener(){}必須實現繼承的抽象方法View.OnClickListener.onClick(查看)錯誤,請幫助我瞭解什麼是錯的。android java setOnClickListener錯誤

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

回答

10

如果你有

btnSave.setOnClickListener(new OnClickListener() { 

變化,對於

btnSave.setOnClickListener(new View.OnClickListener() { 

這只是較新的方式,所以如果你遵循老的教程或博客文章,這就是爲什麼竟被它d過時。

編輯:

import android.view.View.OnClickListener; 

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

     @Override 
     public void onClick(View v) { 
      // do something 
     } 
    }); 
+1

我做了這一變化,並仍然得到一個錯誤在該行稱多個標記 \t - 視圖不能解析爲一個類型 \t - 方法setOnClickListener( View.OnClickListener)類型的視圖不適用於參數(新的 \t OnClickListener(){}) – WmBurkert

+1

編輯我的答案 - 確保您的導入語句是準確的。 –

+0

謝謝,我工作:) – VICTORGS3

1

試試這個

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

Rasel,這似乎沒有改變任何東西。 – WmBurkert

4

您的進口清單不包括android.view.View,只是android.view.View.OnClickListener。如果不知道View對象是onClick()的參數,則編譯器無法解析該實現是否完成。

  1. 變化(不添加)從android.view.View.OnClickListener進口到android.view.View
  2. 更新你的宣言爲公民康恩提到:就個人而言,我會被修復。
+0

這解決了我的錯誤,謝謝! – WmBurkert

0

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

在你的XML佈局文件中選擇你的3個按鈕,它們有一個onClickListener。右鍵單擊它>屬性> 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; 
} 

}

而且讓你的類實現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(); 

迎接,並有很好的發展!

2

我相信你也可以這樣做:

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

我覺得這是用較少的嵌套函數一個更簡潔的方法。

0

首次進口下列包:

import android.view.View.OnClickListener; 

然後改變了下面這個樣子:

btnSave.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
    } 

}); 
0

你可以把看起來這

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 
} 
-1

使用此:

button1.setOnClickListener((OnClickListener) this); 

待辦事項使用這樣的:

button1.setOnClickListener(this); 
+1

也請解釋爲什麼這解決了這個問題。 –