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 ...
随机推荐
- maven的profile 目录、变量打包
<project> <build> <finalName>maven-project</finalName> <resources> < ...
- nginx做正向代理(Centos7,支持http和https)
默认的情况下,使用nginx做正向代理可以解析http请求, 对于诸如baidu.com这样的https请求,nginx默认并不支持,不过我们可以借助第三方模块来实现. 1.先说默认情况下的代理配置 ...
- MiniHttpServer
Mini HTTP Server which can be embed in EXE, Writen in C#(.net framework 2.0). HTTP request dispatch/ ...
- sql server删除数据时如何进行级联删除
可以在创建外键约束时直接设置级联删除
- android 基于分包方案的修复
# 本demo实现原理来自 https://github.com/dodola/HotFix https://zhuanlan.zhihu.com/p/20308548 # Anti类功能,及其原理 ...
- php 验证访问浏览器是电脑还是手机
//判断如果为手机用户则 if(checkmobile()==true) { $url=$_SERVER["HTTP_HOST"]; $urlHost=GetHost($url); ...
- Atitit.二维码功能的设计实践 attilax 总结
Atitit.二维码功能的设计实践 attilax 总结 1.1. 二维码要实现的功能1 1.2. 现有二维码功能设计不足的地方(待改进)1 1.3. 二维码组件1 1.4. Java版 zxing ...
- Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结
Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结 1. 注册表是树形数据库 1 2. 注册表的由来 1 3. Java 操作注册表 2 3.1. 使用Preferences ...
- 强大的Vivado IP工具——自定义IP的使用
首先,要指出,本文不描述任何IP的功能与使用. 在开发一个大型FPGA项目时,多人协作是必不可少的.这个时候,如何提交设计给负责集成的人,是项目开发中最关键的问题之一. 常用的一个方法是,提交网表 ...
- 讲一下 Spring的事务传播特性
1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启 2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务.如果没有事 ...