Android中使用OnClickListener接口实现button点击的低级失误
今天写了几行极为简单的代码,就是想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点击的低级失误的更多相关文章
- android中的OnClickListener两种实现方式
android的activity点击事件中,通过OnClickListener来实现,要实现点击事件有两种方式 1.通过定义一个OnClickListener的内部类来实现 The example b ...
- Android中callback(接口回调)机制
事实上,callback 机制在Android 中无处不在,特别是以Handler.Callback.Listener这三个词结尾的,都是利用callback机制来实现的.比方点击事件onClickL ...
- 回调深入理解 同步回调 以android中View.OnClickListener为列
现在来分析分析下Android View的点击方法onclick();我们知道onclick()是一个回调方法,当用户点击View就执行这个方法,我们用Button来举例好了 //这个是View的 ...
- Android中的Parcelable接口和Serializable使用方法和差别
Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...
- android中必备的接口回调用法
1 ,这个方法很常见,本人觉得也很实用,分享下吧 public class DirverDistanceTool { public void getDirverDistance(LatLng star ...
- Android中取消GridView & ListView默认的点击背景色
方法一: gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); listView.setSelector(new ColorDrawa ...
- Android 中的接口回调
http://blog.csdn.net/wangjinyu501/article/details/22052187 在Android中到处可见接口回调机制,尤其是UI事件处理方面.举一个最常见的 ...
- Android笔记——Button点击事件几种写法
Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...
- Android开发-之监听button点击事件
一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加X ...
随机推荐
- 10-hibernate单表操作-组件属性
组件属性: 实体类中某个属性属于用户自定义的类的对象,比如在实体类中某个属性是自定义类的对象: 这个Address是一个用户自定义类. 该自定义类Address定义如下: //地址类 public c ...
- 尚学堂的一个用了ExtJs的页面代码
<html> <head> <meta http-equiv="Content-Type" content="tex ...
- linux sudo命令详解
--sudo命令重启网卡 sudo service network restart http://bestchenwu.iteye.com/blog/1450292
- 解决——CSS :before、:after ,当content使用中文时有时候会出现乱码
问题: 在进行页面开发时,经常会使用:before, :after伪元素创建一些小tips,但是在:before或:after的content属性使用中文的话,会导致某些浏览器上出现乱码. 例如我遇到 ...
- ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
Thread threadWithParam = new Thread(new ParameterizedThreadStart(new ThreadTest().ShowMsg));//thread ...
- Python 统计代码的行数,Python脚本 统计代码
# coding=utf-8 import os import time # 需要统计的文件夹或者文件,这是在windows下运行的,如果使用Linux系统可以使用 basedir = '/app/l ...
- overflow知多少
本文地址: http://www.hicss.net/some-overflow-knowledge/ 最近在研究OOCSS,当打开template.css阅读第一行时,震惊了,第一眼居然没看懂... ...
- IoC容器Autofac学习笔记
一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...
- 735. Replace With Greatest From Right【medium】
Given an array of integers, replace every element with the next greatest element (greatest element o ...
- sourceInsight设置
复制后光标定格在行尾 Options -> Preferences -> Typing -> After pasting,select:at end of pasted text t ...