目录

点击事件

findViewById()方法查找对应的view的id

监听事件实现的几种写法


点击事件


Android中Touch事件相关内容都被封装到 MotionEvent 中,MotionEvent 中的时间类型有按下、抬起、滑动和结束事件。这些事件都是人机交互的一个过程,按下动作指的是人手指按在手机屏幕上这个动作,抬起动作指的是人手指按下手机后抬起来这个动作,移动动作指的是人手指按下屏幕后移动一段距离的这个动作。

那么当人手指按下后抬起,就完成了点击(onClick)这个动作。

MotionEvent.ACTION_DOWN:按下(按下动作)

MotionEvent.ACTION_UP:抬起(抬起动作)

MotionEvent.ACTION_MOVE:滑动(滑动动作)

MotionEvent.ACTION_CANCEL:结束事件(非人为)

在onClick事件中我们去监听要去做什么样的动作,通过控件(View)自身的.setOnClickListener(OnClickListener)方法添加onClick事件,除了我们常用的按钮(Button)之外,其他的控件也含有点击事件,通过点击事件的监听可以实现点击按钮之后要发生的动作(业务逻辑)。

 

 

findViewById()方法查找对应的view的id


在资源目录 res 文件夹下的所有资源(文件以及信息)系统都会自动在 gen 目录中的 R.java 文件中生成一个对应且唯一的id。我们可以通过这个唯一的id去查找当前对应的内容。gen目录下的所有文件是不需要我们手动添加和修改的,它是会自动在编译中生成,系统会自动对其进行操作。 

R.id.XXX 这句话中的 R 指的就是 gen 目录中的 R.java 文件,R文件中对应的id指的是我们需要去找的那个控件的id,控件id在我们编辑 xml 布局文件的时候给控件添加 android:id 属性添加,R文件中会自动生成与之对应的 id 值。所以我们访问的是 R.id 中控件 id 对应的系统自动生成的id值。这样子我们就可以访问到当前这个控件。

 

 

 //通过findViewById的方法查找对应View的id        btnOne = (Button) findViewById(R.id.btn_one);

 

 

监听事件实现的几种写法


1.匿名内部类实现事件监听

2.独立类(外部类)实现事件监听

3.实现OnClickListener接口实现事件监听

4.重写onClick(View view)方法实现事件监听(标签处理)

 

匿名内部类方式

要去监听一个控件(View)的事件,我们需要去初始化控件。

就是说如果我们想要去为一个Button去添加一个点击事件的监听,我们要去找到这个控件才可以对它进行操作和处理。

初始化控件首先是要声明出来一个实体对象,然后对这个对象赋值,找到 xml 布局文件中对应的控件,在java源代码文件中通过 findViewById() 方法访问控件的 id 返回一个控件对象。

然后通过控件对象自身的 .setOnClickListener(OnClickListener) 方法添加点击事件。这样就是通过匿名内部类的方式的点击事件监听。

//声明初始化控件View(Button)    private Button btnOne; //通过findViewById的方法查找对应View的id,查找id和实现监听都写在onCreate()生命周期中        btnOne = (Button) findViewById(R.id.btn_one);//匿名内部类实现事件监听        btnOne.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Toast.makeText(MainActivity.this, "通过匿名内部类实现点击事件监听", Toast.LENGTH_SHORT).show();                tvShow.setText("通过匿名内部类实现点击事件监听");            }        });

实现结果:

 

独立类方式

这种实现方式比较少见,看起来跟通过匿名内部类实现事件监听相似,但有些许不同。

通过独立类实现事件监听首先自定义 mOnClickListener 类,该类实现 OnClickListener 接口。然后自定义的监听类会自动生成 onClick 方法,点击控件要进行的操作可以在这里实现。

因为自定义监听类中的onClick方法是public的,所以我们可以覆写也可以不覆写。当覆写OnClick方法的时候会自动生成 super.onClick(view);这个语句是调用父类的onClick方法也就是我们自定义类中onClick方法中实现的内容。

如果我们在覆写的 onClick 方法中写入了实现逻辑,在自定义点击类( mOnClickListener )中也定义了实现逻辑,那么我们在实现覆写的 onClick 方法中的逻辑同时,因为 super.onClick(view); 的原因也会去实现父类中onClick()方法中的实现逻辑。

外部类实现监听 View 点击事件的场景是当很多个控件在实现监听的时候除了实现自己本身需要的逻辑之外,还要实现同样的一个动作,那么就可以通过外部类的方式去实现点击事件的监听,将都需要实现的公共逻辑在外部类中实现,然后在覆写的方法中去实现自己本身需要去实现的业务逻辑。

外部类的写法就是提取一些逻辑内容相同的部分,减少代码的冗余。用不用外部类去实现点击事件的监听主要是看我们有没有遇到需要这样去实现的场景。

class mOnClickListener implements View.OnClickListener {    @Override    public void onClick(View view) {        Log.i("MS","通过独立类实现点击事件监听");    }}//MainActivity.java//声明初始化控件View(Button)    private Button btnTwo;//通过findViewById的方法查找对应View的id        btnOne = (Button) findViewById(R.id.btn_two);//使用独立类实现点击事件监听        btnTwo.setOnClickListener(new mOnClickListener(){            @Override            public void onClick(View view) {                super.onClick(view);                Toast.makeText(MainActivity.this, "通过独立类实现点击事件监听", Toast.LENGTH_SHORT).show();                tvShow.setText("通过独立类实现点击事件监听");            }        });

实现结果:

 

实现OnClickListener接口方式

通过接口方式去实现监听事件首先我们要让需要处理的类去实现 OnClickListener 接口,实现这个接口后会让我们去生成 onClick() 方法进行覆写。这个时候业务逻辑实现的地方我们已经找到了,接下来我们来进行对控件view进行绑定的动作。

View的绑定首先是进行控件的声明,然后通过findViewById查找对应view的id,最后实现一个接口的方式实现监听事件(view.setOnClickListener(this))。因为在我们当前类中实现的是一个接口, this 也就是访问当前类的接口的一个对象,这样写完之后就是把当前onClick事件绑定到控件View上面去了。当我们点击View的时候它就会触发当前onClick实现方法。

 

//当前类实现View.OnClickListenerpublic class MainActivity extends AppCompatActivity implements View.OnClickListener{    //声明初始化控件View(Button)    private Button btnThree;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //通过findViewById的方法查找对应View的id        btnThree= (Button) findViewById(R.id.btn_three);        //this是访问当前类的接口的一个对象,就是把当前OnClick事件绑定到控件view上面去        btnThree.setOnClickListener(this);    }    //通过接口方式实现事件监听    @Override    public void onClick(View view) {        Toast.makeText(MainActivity.this, "通过接口方式实现事件监听", Toast.LENGTH_SHORT).show();        tvShow.setText("通过接口方式实现事件监听");    }}

实现结果:

 

重写onClick(View view)方式(标签处理)

在XML布局文件的 onClick 标签上绑定需要的方法,属性值为方法名。之后在 java 源文件中编辑该方法,将监听内容写入方法即可。

实现结果:


 

更多相关文章

  1. Android创建桌面快捷方式两种方法
  2. 实现Android的不同精度的定位(基于网络和GPS)[转]
  3. Android(安卓)Notification 通知详解(兼容Android(安卓)O)
  4. 大神之路:重学Android——Android多媒体MediaPlayer
  5. 玩转Android---组件篇---数据存储之SQLite
  6. Ubuntu下android studio如何使用ndk-build的so库
  7. android Tabhost控件的使用
  8. 01 Android(安卓)布局使用的几种方式
  9. Android(安卓)View、ViewGroup

随机推荐

  1. android 自定义Gallery
  2. android:taskAffinity属性的简单测试
  3. Android(安卓)camera调用出现错误解决方
  4. 【Android】通过耳机调起语音助手App配置
  5. Android(安卓)source 的网址 及 学习网址
  6. Android关于8.0以上Service服务相关问题
  7. Android(安卓)系统(84)---查看分区的大小
  8. Android判断下载File是否为apk文件
  9. Android复习(三)
  10. Android(安卓)Design Support Library