Android实现监听控件点击事件

引言

这篇文章主要想写一下Android实现监听点击事件的几种方法,Activity和Fragment实现起来有些方法上会有些不同,这里也略做介绍。

最近一直在忙一个项目,深感掌握监听事件的重要性,同时也要综合运用实现监听的几种方法,在编写代码的时候正确选择,既能减少代码量,代码的可读性也会更高。

总结

1、通过匿名内部类实现监听

2、直接实现监听接口实现监听

3、自定义内部类实现接口实现监听

一些我想说的:

1、所有的控件都可以注册监听来实现点击后执行某项操作,这并不是只有Button这类的组件特有的功能。

2、 一般来说每个控件使用上面的第一种方法--使用匿名内部类的形式都是类似下面这种:

Button mButton;

mButton=(Button)findViewById(R.id.xx);

mButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
//这里执行具体点击后的操作 }
});

但并不是每一个组件的实现方式都是上面这种,这里我举两个例子给大家参考:

(1)、ListView利用匿名内部类实现监听

ListView mListView=(ListView)findViewById(R.id.xx);

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id){
//这里执行具体操作 }
});

(2)、RecyclerView利用匿名内部类实现监听

//定义ViewHolder内部类
private class xxxx extends RecyclerView.ViewHolder { public xxxx(LayoutInflater inflater,ViewGroup parent){
super(inflater.inflate(R.layout.list_item,parent,false));
itemView.setOnClickListener(new RecyclerView.OnClickListener(){ @Override
public void onClick(View v) {
Toast.makeText(getActivity(),"点击按钮", Toast.LENGTH_LONG).show();
}
});
}
}

在这点上面RecyclerView还是更高级一些,内部实现的这个itemView为我们节省了很多工夫,也隐去了很多细节。

举这两个例子也是希望大家能正确使用匿名内部类为控件注册监听。

3、在Fragment的写法略有区别,这点大家要注意,这里将上面那个Button的修改为在Fragment中

Button mButton;

mButton=(Button)View.findViewById(R.id.xx);

mButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
//这里执行具体点击后的操作 }
});

只是在findViewById()方法前也要记得加View,还有一些是加getActivity()方法的,Fragment的编程很实用,还是需要好好掌握。

像上面这样特殊的大家可以多积累,有点印象知道怎么用就行。

好了,下面详细看看上面的三种方法:

1、通过匿名内部类实现监听

这里和上面的代码有些重复,大家参考一下就好。

public class MainActivity extends AppCompatActivity {

    private Button login;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); login = (Button) findViewById(R.id.login); login.setOnClickListener(new View.OnClickListener(){ @Override
public void onClick(View v) { Toast.makeText(MainActivity.this,"点击登录",Toast.LENGTH_SHORT).show(); }
});
}
}

上面的代码Toast后面的show()一定要记得写,我自己也经常犯这样的错误,调试半天才发现是这个没写。

2、直接实现接口实现监听

这后面两种都比较容易理解,这里我直接给出代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button mButton=(Button)findViewById(R.id.create_database);
mButton.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()){
case R.id.create_database:
//执行具体操作
break; default:
break;
}
}
}

3、自定义内部类实现接口实现监听

代码如下:

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.create_database);
mButton.setOnClickListener(new MyButtonListener());
} class MyButtonListener implements View.OnClickListener{ @Override
public void onClick(View v) {
switch (v.getId()){
case R.id.create_database:
//执行具体操作
break; default:
break;
}
}
}
}

当然,这里也可以不用内部类来实现,新建一个类来继承View.OnClickListener接口也是可以的,不过我并不建议这种做法,这样写还不如直接在本类中继承接口。

我的一些看法:

这上面的三种方法实际上就是一种方法,只是通过不同方式来实现继承View.OnClickListener接口,看个人习惯,掌握了类的继承这三种方法都好理解。

就我个人的建议,当需要注册监听事件的控件较少时,使用匿名内部类得到方法会直观便捷一些,当这类的控件较多时,利用第二或者第三种会好一些,毕竟不用每一个去重写 onClick() 方法。

总结:

这上面和大家分享了一下 Android 实现注册监听的几种方法,也分享了一下我自己的看法,实质还是接口的继承,好好理解类的继承相信这上面的完全不是问题。

在实现上也要注意 Activity 和 Fragment 的区别,不行就在方法前加一个 View 或者getActivity() 之类的,多积累 Fragment 在界面编辑上还是很实用的。

注:本文是Android基于MVC设计模式。

这里大家可以考虑一个问题,在按钮控件很少的情况下我们可以在代码中通过注册监听的情况实现监听点击,但在实际中的Android项目都是十分庞大的,特别像手机游戏这类的,利用这类方法去实现显然时很吃力的,显然 MVC 设计模式也并不适用。

MVVM设计模式,实质上就是 MVC的改进版,MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开,这也使得我们能直接在 XML 文件中直接操作控件点击事件,当然代码的编写就不是上面那样的,大家有兴趣的可以再自行上网查阅资料。

接触Android不多,是个菜鸟,上面有错误的地方还请大家指正,希望能和大家多交流。

本文系原创,转载还请注明出处。

Android实现监听控件点击事件的更多相关文章

  1. 使用WTL的消息反射封装CEdit实现监听控件文本改变事件

    消息反射机制可以使对消息的处理都集中在控件类中,以CEdit的EN_CHANGE消息为例: /*MyEdit.h*/ class CMyEdit:public CWindowImpl<CMyEd ...

  2. iOS 监听控件某个属性的改变observeValueForKeyPath

    创建一个测试的UIButton #import "ViewController.h" @interface ViewController () @property(nonatomi ...

  3. Android监听消息通知栏点击事件

    Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...

  4. 监听tableview的点击事件

    // 监听tablview的点击事件 - (void)addAGesutreRecognizerForYourView { UITapGestureRecognizer *tapGesture = [ ...

  5. highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度

    highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度 作者:highcharts | 时间:2014-6-11 14:07:05 | [小  大] | ...

  6. winform自定义控件中其他遮挡控件点击事件

    自定义控件在其他窗口调用时,里面的lable阻挡了控件的点击事件 解决方法 自定义控件中lable的 点击事件 private void Lable1_Click(object sender, Eve ...

  7. iOS全埋点解决方案-控件点击事件

    前言 ​ 我们主要介绍如何实现控件点击事件($AppClick)的全埋点.在介绍如何实现之前,我们需要先了解一下,在 UIKit 框架下,处理点击或拖动事件的 Target-Action 设计模式. ...

  8. Android 监听按钮的点击事件

    onClick事件1.Button和ImageButton都拥有一个onClick事件 通过自身的.setOnClickListener(OnClickListener)方法添加点击事件2.所有的控件 ...

  9. Android 使用 OnTouchListener 接口监听双击或多击事件

    这里是使用 OnTouchListener 实现的监听双击 or 多击的监听器.通过 View.setOnTouchListener ,可以实现在任意 View 上监听双击事件. 网上有许多文章简单的 ...

随机推荐

  1. sourceSet

    android { sourceSets { main{ manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources ...

  2. AppStore App申请审核加速

    容芳志大牛一直是我学习的榜样 分类: iOS开发经验技巧2014-11-12 09:40 409人阅读 评论(0) 收藏 举报 有没有遇到上线后发现很严重的bug这种情况,修复bug后提交审核又是漫长 ...

  3. OC中RAC编程block的基本使用

    在OC中block的基本使用 // // ViewController.h // RAC--test // // Created by Aaron on 17/1/17. // Copyright © ...

  4. webpack三种代码

    在使用webpack时,主要有三种代码类型: 1.你或你的团队写的源码 2.第三方library或vendor代码 3.管理模块交互的runtime和manifest 什么是manifest文件? 通 ...

  5. IP地址-计算机网络

    如需转载请联系:fengxw6@mail2.sysu.edu.cn 未经许可,禁止转载. ---Sun Yat-sen University 冯兴伟 1.  MAC地址和IP地址都是全局的(全球分配) ...

  6. Hadoop- MapReduce分布式计算框架原理

    分布式计算: 原则:移动计算而尽可能减少移动数据(减少网络开销) 分布式计算其实就是将单台机器上的计算拓展到多台机器上并行计算. MapReduce是一种编程模型.Hadoop MapReduce采用 ...

  7. java高级特性增强

    第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...

  8. Lua调用C,C++函数案例

    该程序主要是C++与Lua之间的相互调用示例.执行内容:(1)新建一个lua_State(2)打开常用库,如io,os,table,string等(3)注册C函数(4)导入程序所在目录下所有*.lua ...

  9. h5打电话发短信写邮件怎么实现

    // 一.打电话<a href="tel:0755-10086">打电话给:0755-10086</a> // 二.发短信,winphone系统无效< ...

  10. java中路径的获取

    网上摘录 (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getReque ...