美文网首页
Android-事件处理与内部通信

Android-事件处理与内部通信

作者: 狼牙战士 | 来源:发表于2017-03-29 15:49 被阅读0次

程序猿的开心一刻###

以下谁是二进制思想的最早提出者?
a,伏羲;b,姬昌;c,莱布尼茨;d,柏拉图。

请在评论区输入答案,接下来进入正题

一、简介

本文将带你学习Android中最基本的事件处理机制,了解什么是事件,怎样来监听事件。随后你将学习到什么是意图,以及通过一个实例来学习怎样用意图在Activity间传递信息。

知识点

  • Android事件监听器
  • Android事件处理者
  • 事件监听器的注册
  • 在Activity之间传递数据

二、事件处理

对于应用的交互而言,事件是一个收集用户交互信息的有效途径。这些事件包括按压按钮或者触碰屏幕。Android的框架维护了一个基于先进先出的事件队列,你可以在程序中捕获这些事件,并针对每个需求,采取合适的行动。

下面有三个关于Android事件管理的概念:

  • 事件监听器:事件监听器是View类中的一个接口,它包含了一个回调方法。当用户与UI组件进行交互时,相应已注册的监听器会被触发,Android框架会调用这些方法。
  • 事件监听器注册:事件注册就是一个事件处理者通过事件监听器来注册的过程。因此,事件监听器触发事件时调用响应的处理者(Handler)。
  • 事件处理者:当某个事件发生时,如果我们为该事件注册了一个事件监听器,那么这个监听器就会调用事件处理者。后者为实际处理该事件的方法。

1. 事件监听器和事件处理者

以下为一些常见的事件处理者,后面补充了它对应的事件监听器和说明。

  • onClick():对应的事件监听器是OnClickListener()。当用户点击、触摸或者聚焦(给它焦点)与任何一个部件时(这些部件有按钮、文本和图片等),该方法就会被调用。你可以使用名为onCLick()的事件处理者来处理这些事件。
  • onLongClick():对应的事件监听器是OnLongClickListener()。当用户长时间(一秒或者很多秒)点击、触摸或聚焦于任何一个部件时,该方法会被调用。你可以使用名为onLongClick()的事件处理者来处理这些事件。
  • onFocusChange():对应的事件监听器是OnFocusChangeListener()。有时当用户从某个视图部件上移开关注时,这个部件就会失去焦点,此时该方法会被调用。你可以使用onFocusChange()这个事件处理者来处理这些事件。
  • onKey():对应的事件监听器是OnFocusChangeListener。当用户关注某个部件并且按压(或释放)了设备上的实体按键时,该方法会被调用。你可以使用onKey()事件处理者来处理这个事件。
  • onTouch():对应的事件监听器是OnTouchListener()。当用户按键、释放按键或者在屏幕上任意移动手势时,会调用该方法。你可以使用onTouch()事件处理者来处理这个事件。
  • onMenuItemClick:对应的事件监听器是onMenuItemCLickListener()。当用户选择了一个菜单项时会调用该方法。你可以使用onMenuItemCLick()事件处理者来处理这个事件。
  • onCreateContextMenu():对应的事件监听器是OnCreateContextMenuItemListener()。当上下文菜单正在建立时(持续的长按动作会触发该事件)会调用该方法。

View类中,还有更多诸如OnHoverListenerOnDragListener之类的事件监听器可供使用。所以为了开发具有更加丰富功能的应用,你需要去查阅和参考Android开发的官方文档。

2. 事件监听器注册

前文提到过,事件的注册就是一个事件处理者注册事件监听器的过程。尽管对于注册监听器来说,有许多灵活的方法,但在本文中只列出了其中最常用的3种方法。在你的实际项目中,可以任意使用其中之一。

这些方法有:

  • 使用匿名内部类
  • Activity类中实现Listener的接口。
  • activity_main.xml(对应的)布局文件中直接通过android:onClick属性指定事件处理者。

下面的内容将为你逐一讲解。

(1)使用匿名内部类注册事件监听器

以按钮的点击事件为例,首先要在xml布局文件中定义按钮的id,然后在Activity类中实例化控件,使用自定义的内部类,如下所示:

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 此处写其他代码
        // button是查找后赋值的按钮对象
        button.setOnClickListener(new MyOnClickListener();
    }
    // 自定义的匿名内部类
    Private final  class MyOnClickListener implements OnClickListener{
        Public void onClick(View view){
            // 此处写点击功能的逻辑
        }
    }
}

(2)实现事件监听器接口

这种方法是让当前Activity实现OnClickListener,并实现这个接口中的方法:onClick(View view)

public class MainActivity extends Activity implements OnClickListener{
    
    // 当然这儿应该还有该类中的其他内容

    @Override
    Public void onClick(View view){
    // 此处填实现的细节
    }
}

(3)在布局文件中指定事件处理者

以按钮的点击事件为例,这种方法是在xml布局文件中,在控件属性里添加android:onClick属性,然后指明调用方法的名字,例如android:onClick="onAddClick"

在对应的Activity类中,也需要写一个对应的方法,方法名要与之对应,如:

public void onAddClick(View view){
    //这里填具体的逻辑
}

3. 触碰模式

用户可以通过实体按键、屏幕上的按钮,以及触摸屏幕来和设备交互。触摸屏幕能让设备进入触碰模式,用户可以通过屏幕上的虚拟按钮、图片来完成交互。你可以通过调用View类的isInTouchMode()方法来检查设备是否处于触碰模式。

这个流程图如下所示:

演示.gif

参考文档

相关文章

  • Android-事件处理与内部通信

    程序猿的开心一刻### 以下谁是二进制思想的最早提出者?a,伏羲;b,姬昌;c,莱布尼茨;d,柏拉图。 请在评论区...

  • Web之事件处理

    javascript处理事件 事件种类 基本事件(表单,window,键盘,鼠标) HTML5事件(网络,通信,拖...

  • UNIX通信

    内部通信与外部通信 即时通讯的几类: 1 交谈命令 write: 半双工通信 $ write username [...

  • runloop

    1.runloop:一个事件处理的循环。用来不停的调度工作以及处理输入事件,它的内部实际上是一个循环,这个内部循环...

  • Linux内核设计与实现 中断I/O: 顶部

    中断I/O CPU与外设之间的一种通信方式。 与CPU内部的异常类似。但区别就在于异常的发生是与处理器的时...

  • SCXML 事件

    事件是SCXML的基本概念之一,大部分转移都是由事件触发的。事件的内部结构与SCXML处理器构建平台相关,但外部接...

  • Android-解决事件冲突和处理滑动事件

    1.解决事件冲突的主要思路 1.down事件首先会传递到onInterceptTouchEvent()方法 2.如...

  • Draft.js的事件处理机制

    Draft 事件处理机制 Draft.js 内部封装了一系列基础的事件处理函数,当事件触发时,这些函数接收当前ev...

  • 第二十节:Vue组件传参:Vue子组件向父组件传参(事件传参)

    1. 自定义事件 除了可以处理原生的DOM事件, v-on指令也可以处理组件内部触发的自定义的事件,调用this....

  • 我的前端入门笔记(11)--事件冒泡、捕获、代理

    1.事件冒泡与捕获 冒泡:先触发内部事件,再触发外部事件;捕获:先触发外部事件,再触发内部事件; addEvent...

网友评论

      本文标题:Android-事件处理与内部通信

      本文链接:https://www.haomeiwen.com/subject/xlieottx.html