为了账号安全,请及时绑定邮箱和手机立即绑定

MainActivity报错如何解决,是独立类和接口类监听事件报错,匿名内部类和外部类实现监听事件没错。

Error:(54, 32) 错误: 不兼容的类型: com.example.mook.shiyan.OnClickListener无法转换为android.view.View.OnClickListener

Error:(55, 32) 错误: 不兼容的类型: MainActivity无法转换为OnClickListener

注: 某些消息已经过简化; 请使用 -Xdiags:verbose 重新编译以获得完整输出

2 个错误

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

> Compilation failed; see the compiler error output for details.



package com.example.mook.shiyan;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
   private Button yesbutton;
   private Button bt1;
   private Button bt2;
   private Button bt3;
   private ImageButton bt4;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       yesbutton=(Button)findViewById(R.id.button);
       bt1=(Button)findViewById(R.id.button2);
       bt2=(Button)findViewById(R.id.button3);
       bt3=(Button)findViewById(R.id.button4);
       bt4=(ImageButton)findViewById(R.id.imageButton);

       yesbutton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View arg0) {
               System.out.println("我的Button被点击了");
           }
       });

       bt1.setOnClickListener(new MyOnClickListener() {
           @Override
           public void onClick(View v) {
               super.onClick(v);
               Toast.makeText(MainActivity.this, "bt1被执行", 1).show();
           }
       });

       bt2.setOnClickListener(new MyOnClickListener() {
           @Override
           public void onClick(View v) {
               super.onClick(v);
               Toast.makeText(MainActivity.this, "bt2被执行", 1).show();
           }
       });

       bt3.setOnClickListener(listener);
       bt4.setOnClickListener(this);

   }

      OnClickListener listener = new OnClickListener() {
      public void onClick(View v) {
           Log.i("tag","独立类的监听事件被触发了");
       }
    };

   public void onClick(View v){
       Log.i("tag","第三种方式实现");
   }

   class MyOnClickListener implements View.OnClickListener{
   @TargetApi(Build.VERSION_CODES.HONEYCOMB)
   public void onClick(View v){
       v.setAlpha(0.5f);
   }
}}

正在回答

5 回答

你得外部类没有写在最外面

0 回复 有任何疑惑可以回复我~

不好意思,这几天课多,没有来,关于导包的问题

import android.view.View.OnClickListener;

导入的是这个包

0 回复 有任何疑惑可以回复我~
#1

紫金湖人 提问者

好的!嗯
2016-03-18 回复 有任何疑惑可以回复我~

//这里是独立类实现的监听事件类
class MyOnClickListener implements OnClickListener {

    @Override
    public void onClick(View v) {
        //独立类监听事件的逻辑
        Log.i("tag", "独立类:父类的onClick事件");
    }



我的那里可能是导包导错了!

0 回复 有任何疑惑可以回复我~

你可以看看我的代码,有详细注释,哪里不懂咱们再探讨,我也是初学者

package com.example.muke1;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

//接口实现监听事件需要implements
public class MainActivity extends Activity implements OnClickListener{

    //loginbutton:测试匿名类实现监听事件
    private Button loginbutton;
    //anotherbutton:测试独立类实现监听事件
    private Button anotherbutton;
    //threebutton:测试独立类实现监听事件都调用父类的情况
    private Button threebutton;
    //imgbutton:测试接口类实现监听事件
    private ImageButton imgbutton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 讲布局xml文件引入到activity中
        setContentView(R.layout.activity_main);
        // 初始化按钮,就是从R文件中找到按钮
        loginbutton = (Button) findViewById(R.id.button1);
        anotherbutton = (Button) findViewById(R.id.button2);
        threebutton = (Button) findViewById(R.id.button3);
        imgbutton=(ImageButton) findViewById(R.id.imageButton1);
        // 通过匿名内部类实现监听事件
        loginbutton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 在当前onClick中监听点击的Button操作
                System.out.println("我的button被点击了!!!");
            }
        });
        // 通过外部类实现点击事件
        anotherbutton.setOnClickListener(new MyOnClickListener() {
            @Override
            public void onClick(View v) {
                //调用父类的onClick方法
                super.onClick(v);
                //在日志中输出一个提示
                System.out.println("anotherbutton实例化的onClick");
                //在应用中输出一个通知
                Toast.makeText(MainActivity.this, "anotherbutton要执行的逻辑", 1).show();
            }
        });
        threebutton.setOnClickListener(new MyOnClickListener() {
            @Override
            public void onClick(View v) {
                //调用父类的onClick方法
                super.onClick(v);
                System.out.println("threebutton实例化的onClick");
                Toast.makeText(MainActivity.this, "threebutton要执行的逻辑", 1).show();
            }
        });
        //接口方式实现点击事件的监听,监听ImageButton
        imgbutton.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        Log.i("tag", "接口方式实现的监听事件");
    }
}
//这里是独立类实现的监听事件类
class MyOnClickListener implements OnClickListener {

    @Override
    public void onClick(View v) {
        //独立类监听事件的逻辑
        Log.i("tag", "独立类:父类的onClick事件");
    }

}

0 回复 有任何疑惑可以回复我~

你把yesbutton是onclick函数的参数View arg0改成View v试试

0 回复 有任何疑惑可以回复我~
#1

紫金湖人 提问者

匿名内部类的实现和外部类的实现没有错误,是独立类和接口类的实现有错误。 可以知道一下吗?
2016-03-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android攻城狮的第一门课(入门篇)
  • 参与学习       312584    人
  • 解答问题       4633    个

想快速掌握Android应用开发基础,选择学习这门课程就对了。

进入课程

MainActivity报错如何解决,是独立类和接口类监听事件报错,匿名内部类和外部类实现监听事件没错。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信