关于button点击事件中setOnClick等元素的解读以及方法?以及toast的位置以及作用?

故事熊
  • 69

此文末参考链接:
此段代码的教程以及使用接口的方式、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不能是构造方法吧?

问题1View.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:不是必须的,看你怎么设计,多看看设计模式

参考链接

链接1:(第十二讲)Button 及点击事件
链接2: Android响应onClick方法的五种实现方式

回复
阅读 2.5k
1 个回答

1:setOnClickListener是匿名内部类

2:Toast写在onClick方法中,onClick写在setOnClickListener方法中,toast写在监听器里的

3:点击事件方式有多种,匿名内部类的方式是本段代码,接口方式这两种是常用的

4:可能setOnClickListener是回调函数,之后是对象而不是方法

仍未知:View.OnClickListener是不是构造器

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏