今天写了几行极为简单的代码,就是想implements  View.OnCLickListener.然后实现按钮点击操作。可是按钮却没有反应。找了五分钟还是没有结果。

下面是我的代码,希望大家不要嘲笑:

XML布局例如以下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <Button
android:id="@+id/id_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮" /> </RelativeLayout>

最初Java代码例如以下:

public class MainActivity extends Activity implements View.OnClickListener {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_btn:
Toast.makeText(MainActivity.this, "被点击了", Toast.LENGTH_LONG).show();
break; default:
break;
}
}
}

可是按钮点击没有不论什么反应,经过检查后,发现是Button没有初始化,那好。如今初始化Button。改动代码例如以下:

public class MainActivity extends Activity implements View.OnClickListener {

    private Button button;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.id_btn);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_btn:
Toast.makeText(MainActivity.this, "被点击了", Toast.LENGTH_LONG).show();
break; default:
break;
}
}
}

定义了Button而且findViewById()后。发现点击按钮还是没有不论什么反应。再次研究了五分钟,最终发现了问题关键。最后改动代码例如以下:

public class MainActivity extends Activity implements View.OnClickListener {

    private Button button;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.id_btn);
button.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_btn:
Toast.makeText(MainActivity.this, "被点击了", Toast.LENGTH_LONG).show();
break; default:
break;
}
}
}

最后实现效果例如以下:

如今来总结一下,怎么会出现如此低级的错误。对于实现接口来点击按钮,并需增加一行代码就是:

 button.setOnClickListener(this);
    我来简单解释一下这种方法public void setOnClickListener(View.OnClickListener),官方的英文解释是“Register a callback to be invoked when this view is clicked.If this view is not clickable,it becomes clickable.”.翻译过来就是“当控件被点击的时候,这个已经注冊的回调方法将会被调用(invoked).假设这个控件本来是不能被点击的,
那么如今就能够被点击。”
所以直观的理解就是为View设置一个监听器,监听这个View的操作。 假设没有该方法,则点击操作不会响应相应的回调方法。 參数使用this表示在该Activity中,在这里this==MainActivity.this.
对于这个相对照较简单的问题,自己也栽到坑里了。感觉很惭愧,所以在此警示。希望大家也不要犯低级失误。

Android中使用OnClickListener接口实现button点击的低级失误的更多相关文章

  1. android中的OnClickListener两种实现方式

    android的activity点击事件中,通过OnClickListener来实现,要实现点击事件有两种方式 1.通过定义一个OnClickListener的内部类来实现 The example b ...

  2. Android中callback(接口回调)机制

    事实上,callback 机制在Android 中无处不在,特别是以Handler.Callback.Listener这三个词结尾的,都是利用callback机制来实现的.比方点击事件onClickL ...

  3. 回调深入理解 同步回调 以android中View.OnClickListener为列

    现在来分析分析下Android View的点击方法onclick();我们知道onclick()是一个回调方法,当用户点击View就执行这个方法,我们用Button来举例好了   //这个是View的 ...

  4. Android中的Parcelable接口和Serializable使用方法和差别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

  5. android中必备的接口回调用法

    1 ,这个方法很常见,本人觉得也很实用,分享下吧 public class DirverDistanceTool { public void getDirverDistance(LatLng star ...

  6. Android中取消GridView & ListView默认的点击背景色

    方法一: gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); listView.setSelector(new ColorDrawa ...

  7. Android 中的接口回调

    http://blog.csdn.net/wangjinyu501/article/details/22052187   在Android中到处可见接口回调机制,尤其是UI事件处理方面.举一个最常见的 ...

  8. Android笔记——Button点击事件几种写法

    Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...

  9. Android开发-之监听button点击事件

    一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加X ...

随机推荐

  1. Windows 2008 R2有效激活方法【转】

    原文地址:http://jingyan.baidu.com/article/851fbc3707096e3e1f15ab33.html 装了windows server 2008之后才发现,它与win ...

  2. 使用scrapy进行12306车票查询

    概述 通过12306的查询API进行查询某日火车票, 结果保存在csv文件中. 详细 代码下载:http://www.demodashi.com/demo/12623.html 一.环境搭建 1. 安 ...

  3. IOS后台文件上传

    public ModelAndView GetImage(HttpServletRequest request,   HttpServletResponse response) throws Exce ...

  4. struts过滤器的原理

    struts就是充当拦截器(过滤器)的作用.在web.xml配置过滤器, package cn.itcast.framework.core; import java.io.IOException; i ...

  5. angular过滤器使用 自定义过滤器

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  6. mybatis-config.xml文件详解

    1. 属性列表 Mybatis的配置文件中包含了影响mybatis行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: ·configuration 根配置 ·pro ...

  7. C#新特性, dynamic, ExpandObject

    http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx using System; using System ...

  8. erlang supervisor中启动普通的进程

    文字部分转自: http://1234n.com/?post/qou3eb supervisor的子进程 一开始使用supervisor的时候,我用的是init/1返回子进程规格列表的方式,并且所有子 ...

  9. python之pilow验证码

    pilow的基本操作 """ Created on Fri Jun 1 12:36:38 2018 @author: Frank """ f ...

  10. iOS开发多线程篇 05 —GCD介绍

    iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...