setOnClickListener无法正常工作并抛出错误

时间:2011-07-13 19:30:51

标签: android android-layout

以下是我的计划,我收到此错误:

Description Resource    Path    Location    Type
The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (welcome)  welcome.java    /testcalculator/src/com/testcalculator  line 31 Java Problem

welcome.java

package com.testcalculator;
public class welcome extends Activity{
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome1);
        Button playBtn = (Button) findViewById(R.id.playBtn);
        playBtn.setOnItemClickListener();
        Button exitBtn = (Button) findViewById(R.id.exitBtn);
        exitBtn.setOnClickListener(this);
    }
    public void onClick(View v) {
        Intent i;
        switch (v.getId()){
        case R.id.playBtn :
            i = new Intent(this, testcalculator.class);
            startActivity(i);
            break;
        case R.id.exitBtn :
            finish();
            break;
        }
    }
   }

问题是,我在我的问题中有所有必需的导入选项,但我仍然收到错误消息。

8 个答案:

答案 0 :(得分:1)

您将Activity类作为OnClickListener传递到此行:

exitBtn.setOnClickListener(this);

但是,您的类需要明确声明它正在实现View.OnCLickListener接口。将您的类声明行更改为:

public class welcome extends Activity implements OnClickListener

还有其他几点需要注意:

你写了playBtn.setOnItemClickListener()。也许你的意思是playBtn.setOnClickListener(this)?按钮没有OnItemClickListeners

您也可以通过声明匿名类来设置OnClickListener而不让activity类本身实现接口。像这样:

playBtn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // playBtn code
    }
});

exitBtn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // exitBtn code
    }
});

这种方式更常用,因为它更具可读性。通过隔离onClick代码上的按钮,您可以轻松地告诉哪个按钮做了什么,而不是将它全部放在一个方法中并让类本身实现OnClickListener。

答案 1 :(得分:0)

Button playBtn = (Button) findViewById(R.id.playBtn);
playBtn.setOnItemClickListener();

应该是setOnClickListener(this),就像退出按钮一样。退出按钮是否有效?

答案 2 :(得分:0)

您正在为两个错误的OnClickListener类设置常见的onClick方法。尝试为按钮的OnClickListener类提供两种不同的onClick方法。

答案 3 :(得分:0)

如果您想将this用作exitBtn.setOnClickListener(this);,则必须声明您的Activity将实现接口OnClickListener

public class welcome extends Activity implements OnClickListener {
...
}

答案 4 :(得分:0)

请改为尝试:

public void onCreate(Bundle savedInstanceState)
   {
   super.onCreate(savedInstanceState);
    setContentView(R.layout.welcome1);


    //////// MENU  //////////
    Button playBtn = (Button) findViewById(R.id.playBtn);
    playBtn.setOnItemClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            i = new Intent(this, testcalculator.class);
            startActivity(i);
        }
    });

    Button exitBtn = (Button) findViewById(R.id.exitBtn);
    exitBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            finish();
        }
    });
}

或者更改您的类以实现OnClickListener,如:public class welcome extends Activity implements OnClickListener

答案 5 :(得分:0)

导入以下内容:

import android.view.View.OnClickListener;

答案 6 :(得分:0)

您在主要活动之上编写此行并实现onClickListener,

public class welcome extends Activity implements OnClickListener

答案 7 :(得分:-1)

你需要写

playBtn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // code here
    }
});

也是同一个按钮。我认为它会比你的版本更好。 :)