关于button点击事件中setOnClick等元素的解读以及方法?以及toast的位置以及作用?
此文末参考链接:
此段代码的教程以及使用接口的方式、switch语句的教程链接为链接1.
汇总里说的有更多的实现方法,为链接2。
文中链接为视觉统一,链接均于文末,以上为方便文中跳转,加了文中的跳转链接。
以下代码为我学习button以及监听器和点击事件相关的简单代码:
直接上代码,讨论与咨询中教程链接于参考链接中(如果需要我将教程文字放上来):
package com.example.felixxiong.uitest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; //需要添加buton包导入
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button mButton = (Button)findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener(){
@Override
public void OnClick(View view){
Toast.makeText(MainActivity.this.,"点击了Toast",Toast.LENGTH_SHORT).show();
}
});
}
}
以上代码我的初次理解
Button mButton
就是赋一个值mbutton,
button findviewbyid就原本是一个返回view,但是因为根据ID里的button就返回一个button实例,这个过程就是Button mButton = (Button)findViewById(R.id.button);
这一行,
下面就是注册一个监听器,调用构造器View.OnClickListener,之后重写onclick,在后面括号里写自己的逻辑?
返回button实例后就是一个向下转型的过程,就是(Button)findViewById(R.id.button);
,等号后半段
大体概括是:先取名字,之后获得ID向下转型返回实例,之后注册监听器,重写方法,写自己的跳转逻辑?
关于讨论以及咨询交流汇总
setOnClickListener
GSX:
mButton.setOnClickListener(new View.OnClickListener(){
//注册监听器,调用View.OnClickListener构造器
XY:这不是个类,是个接口
还有的问题在"衔接的问题"
问题:Java中,类使用new就可以当对象使用,所以这里的setOnClickListener
是匿名内部类,或者是接口?
衔接的问题
GSX:PH说new View.OnClickListener
是对象,教程里说里面传入set这个是对象,类变成new不就是当对象使用了,所以等于是对象,new 后面调用构造器,可是XY说set是接口不是构造器,而且我还没到调用接口这一个步骤
XY:应该不是构造器,因为回调函数是一个对象而不是实现的方法
new View.OnClickListener
GSX:new不是定义构造器么?
PH:是对象
XY:接口的new不能是构造方法吧?
问题1:View.OnClickListener
是对象,之前说new是引用构造器,new的前面setOnClickListener
使用new就可以编程对象使用,对象传入对象?
问题2:new不应该是调用构造器,教程里写的是对象?是不是View.OnClickListener
不是构造器?
OnClick()
GSX:Listener之后都是点击逻辑吧?
PH:OnClick()
方法内是点击逻辑
问题:toast仅仅是气泡?在实际的开发应用中,这个应该也算是点击之后的逻辑?因为教程中是可以进行实战添加的,点击之后可以出现
toast
GSX:以上代码也可以单独添加toast,还有使用接口的方式也可以实现toast,是不是有两种方法?
PH:这个是写在监听器里的,所以是监听器,点击后的逻辑都是监听器实现的,没监听器就不知道此按钮是否被点击…反正不用监听器,toast做不出来,所以两种方法是不存在的
问题:toast是写在监听器里的么?看教程中点击事件可以根据这种代码即可实现,还有一种方式就是增加switch语句和case中实现,下面的链接2有更多的实现方法……
如果说toast是写在监听器里的,那监听器是不是包括了以下代码:
mButton.setOnClickListener(new View.OnClickListener(){
@Override
public void OnClick(View view){
Toast.makeText(MainActivity.this.,"点击了Toast",Toast.LENGTH_SHORT).show();
}
而不只只是含有以下这一行?
自定义button名称.setOnClickListener(new View.OnClickListener(){
关于本段代码
点击事件
GSX:你们点击事件用的是接口(使用switch语句),还是转换实例向下转型(即本代码)?
XH:点击事件不用接口用什么?
GTF:这个有很多重载的方式
问题:点击事件,以上代码可以作为点击事件(绑定)方式之一,还是仅仅用于注册监听器?
因为链接1以及链接2中也有涉及使用接口进行点击事件(即switch语句的方式)
关于使用接口的方式绑定事件
GSX:教程里还有一个方法就是使用接口点击事件,使用的是switch语句,之后里面有toast,但是仅仅是现在的绑定方法也可以出先toast,但是有人说toast是写在监听器里的,逻辑是在onClick后的括号里面写
PZ:看你怎么设计,都可以实现,一般switch里越简单越好
GSX:Android点击事件都是需要接口的?
PZ:不是必须的,看你怎么设计,多看看设计模式
参考链接:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
1:setOnClickListener是匿名内部类
2:Toast写在onClick方法中,onClick写在setOnClickListener方法中,toast写在监听器里的
3:点击事件方式有多种,匿名内部类的方式是本段代码,接口方式这两种是常用的
4:可能setOnClickListener是回调函数,之后是对象而不是方法
仍未知:View.OnClickListener是不是构造器