`

Android 程式开发:(九)用户界面 —— 9.3 注册事件监听器

 
阅读更多

当用户与视图views进行交互的时候,views也会触发事件。举个例子,当用户点击了一个按钮,你需要为这个事件服务,只有这样,才能去执行某些适当的行为。如果想这么做的话,你就需要为视图views注册监听。

使用上一节中的例子,在activity中有两个Button。我们可以使用一个匿名的类,为按钮设置点击事件。

  1. packagenet.learn2develop.UIActivity;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.KeyEvent;
  5. importandroid.view.View;
  6. importandroid.view.View.OnClickListener;
  7. importandroid.widget.Button;
  8. importandroid.widget.EditText;
  9. importandroid.widget.Toast;
  10. publicclassUIActivityActivityextendsActivity{
  11. /**Calledwhentheactivityisfirstcreated.*/
  12. @Override
  13. publicvoidonCreate(BundlesavedInstanceState){
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.main);
  16. //---thetwobuttonsarewiredtothesameeventhandler---
  17. Buttonbtn1=(Button)findViewById(R.id.btn1);
  18. btn1.setOnClickListener(btnListener);
  19. Buttonbtn2=(Button)findViewById(R.id.btn2);
  20. btn2.setOnClickListener(btnListener);
  21. }
  22. //---createananonymousclasstoactasabuttonclicklistener---
  23. privateOnClickListenerbtnListener=newOnClickListener()
  24. {
  25. publicvoidonClick(Viewv)
  26. {
  27. Toast.makeText(getBaseContext(),
  28. ((Button)v).getText()+"wasclicked",
  29. Toast.LENGTH_LONG).show();
  30. }
  31. };
  32. @Override
  33. publicbooleanonKeyDown(intkeyCode,KeyEventevent)
  34. {
  35. switch(keyCode)
  36. {
  37. caseKeyEvent.KEYCODE_DPAD_CENTER:
  38. Toast.makeText(getBaseContext(),
  39. "Centerwasclicked",
  40. Toast.LENGTH_LONG).show();
  41. break;
  42. caseKeyEvent.KEYCODE_DPAD_LEFT:
  43. Toast.makeText(getBaseContext(),
  44. "Leftarrowwasclicked",
  45. Toast.LENGTH_LONG).show();
  46. break;
  47. caseKeyEvent.KEYCODE_DPAD_RIGHT:
  48. Toast.makeText(getBaseContext(),
  49. "Rightarrowwasclicked",
  50. Toast.LENGTH_LONG).show();
  51. break;
  52. caseKeyEvent.KEYCODE_DPAD_UP:
  53. Toast.makeText(getBaseContext(),
  54. "Uparrowwasclicked",
  55. Toast.LENGTH_LONG).show();
  56. break;
  57. caseKeyEvent.KEYCODE_DPAD_DOWN:
  58. Toast.makeText(getBaseContext(),
  59. "Downarrowwasclicked",
  60. Toast.LENGTH_LONG).show();
  61. break;
  62. }
  63. returnfalse;
  64. }
  65. }
如果你点击了OK按钮或Cancel按钮,对应的消息就会出现在屏幕上,这也就说明了,适当的事件被出发了。



除了定义一个匿名类,也可以定一个匿名内部类去处理事件。下面的例子展示如何处理EditText的onFocusChange()方法。

  1. //---createananonymousinnerclasstoactasanonfocuslistener---
  2. EditTexttxt1=(EditText)findViewById(R.id.txt1);
  3. txt1.setOnFocusChangeListener(newView.OnFocusChangeListener()
  4. {
  5. @Override
  6. publicvoidonFocusChange(Viewv,booleanhasFocus){
  7. Toast.makeText(getBaseContext(),
  8. ((EditText)v).getId()+"hasfocus-"+hasFocus,
  9. Toast.LENGTH_LONG).show();
  10. }
  11. });
当EditText获取焦点,屏幕上就会打印出一行消息。

也可以使用匿名内部类,为两个Button设置监听。

  1. //---thetwobuttonsarewiredtothesameeventhandler---
  2. Buttonbtn1=(Button)findViewById(R.id.btn1);
  3. //btn1.setOnClickListener(btnListener);
  4. btn1.setOnClickListener(newView.OnClickListener(){
  5. publicvoidonClick(Viewv){
  6. //---dosomething---
  7. }
  8. });
  9. Buttonbtn2=(Button)findViewById(R.id.btn2);
  10. //btn2.setOnClickListener(btnListener);
  11. btn2.setOnClickListener(newView.OnClickListener(){
  12. publicvoidonClick(Viewv){
  13. //---dosomething---
  14. }
  15. });

那么,到底该使用哪种方法去为视图设置监听呢?当你需要使用一个监听器去为多个视图服务的时候,匿名类就很有用处了。如果你只需要为单一的视图设置监听,那么就使用匿名内部类吧。
分享到:
评论

相关推荐

    jetty-security-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-security-9.3.19.v20170502.jar; 赠送原API文档:jetty-security-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-security-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...

    jetty-http-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-http-9.3.19.v20170502.jar; 赠送原API文档:jetty-http-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-http-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...

    jetty-webapp-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-webapp-9.3.19.v20170502.jar; 赠送原API文档:jetty-webapp-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-webapp-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-webapp-...

    jetty-servlet-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-servlet-9.3.19.v20170502.jar; 赠送原API文档:jetty-servlet-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-servlet-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...

    jetty-webapp-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-webapp-9.3.19.v20170502.jar; 赠送原API文档:jetty-webapp-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-webapp-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-webapp-...

    jetty-xml-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-xml-9.3.19.v20170502.jar; 赠送原API文档:jetty-xml-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-xml-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-xml-9.3.19.v...

    jetty-io-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-io-9.3.19.v20170502.jar; 赠送原API文档:jetty-io-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-io-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-io-9.3.19.v20170502....

    jetty-servlet-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-servlet-9.3.19.v20170502.jar; 赠送原API文档:jetty-servlet-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-servlet-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...

    jetty-util-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-util-9.3.19.v20170502.jar; 赠送原API文档:jetty-util-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-util-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-util-9.3.19.v...

    jetty-server-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-server-9.3.19.v20170502.jar; 赠送原API文档:jetty-server-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-server-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-server-...

    jetty-xml-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-xml-9.3.19.v20170502.jar; 赠送原API文档:jetty-xml-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-xml-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-xml-9.3.19.v...

    jetty-security-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-security-9.3.19.v20170502.jar; 赠送原API文档:jetty-security-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-security-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...

    jetty-io-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-io-9.3.19.v20170502.jar; 赠送原API文档:jetty-io-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-io-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-io-9.3.19.v20170502....

    jetty-http-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-http-9.3.19.v20170502.jar; 赠送原API文档:jetty-http-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-http-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...

    jetty-server-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-server-9.3.19.v20170502.jar; 赠送原API文档:jetty-server-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-server-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-server-...

    jetty-util-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-util-9.3.19.v20170502.jar; 赠送原API文档:jetty-util-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-util-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-util-9.3.19.v...

    ArcGIS9.3注册文件

    【ArcGIS 9.3 注册文件详解】 ArcGIS 是一款由Esri公司开发的全球领先的地理信息系统(GIS)软件,广泛应用于地图制作、空间数据分析、地理信息管理等多个领域。在 ArcGIS 9.3 版本中,包含了三个主要组件:ArcGIS ...

    arcgis9.3注册码

    arcgis9.3注册码

    Android 3D游戏开发技术宝典-OpenGL ES 2.0 (吴亚峰) 源代码

    第1章 新一代的王者——android概览 1 1.1 智能手机市场现状 1 1.1.1 五大智能手机操作系统 1 1.1.2 智能手机市场的新星 2 1.2 android平台的特点及未来的趋势 3 1.2.1 全新理念带来的体验风暴 3 ...

    ENGIN9.3注册文件

    arcgisengine9.3注册工具,很好用,欢迎下载!

Global site tag (gtag.js) - Google Analytics