zoukankan      html  css  js  c++  java
  • ViewUtils模块的使用

    参考一:http://fanli7.net/a/bianchengyuyan/C__/20131102/439000.html

    参考二:http://www.eoeandroid.com/blog-692530-48289.html

    今天在看某android源码时,才头一次发现可以这样使用,SO,参考了两篇解释详细的文章做个记录。

    • ViewUtils模块:

      • android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
      • 新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
      • 目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。

      ViewUtils  android中得ioc(控制反轉)框架,可以完全使用注解的方式來完成UI的绑定和事件绑定。簡單的說,ViewUtils的功能就是做這個的,但是可以說,就這麼個功能確是能極大的簡化我們的代碼。

    下面我們看下具體的代碼,順便對比下注解的方式绑定ID和findViewById之間的差別。

     1 @ViewInject(R.id.btn)
     2     private Button btn;
     3     
     4     @ViewInject(R.id.img)
     5     private ImageView img;
     6     
     7     @ViewInject(R.id.list)
     8     private ListView list;
     9     
    10     @Override
    11     protected void onCreate(Bundle savedInstanceState) {
    12         super.onCreate(savedInstanceState);
    13         setContentView(R.layout.activity_second);
    14         ViewUtils.inject(this);
    15     }
    ViewUtils
     1     @Override
     2     protected void onCreate(Bundle savedInstanceState) {
     3         super.onCreate(savedInstanceState);
     4         setContentView(R.layout.activity_second);
     5         
     6         btn = (Button) findViewById(R.id.btn);
     7         img = (ImageView) findViewById(R.id.img);
     8         list = (ListView) findViewById(R.id.list);
     9         
    10     }
    Normal

    如果項目中得Activity中的控件相當多,那麼想象一下代碼中累積的那一大坨就真心受不了。通過xUtils的簡單注解,就能輕松擺脫無盡壞味道的代碼。

    注意:在使用注解绑定控件的時候,一定記得在onCreate中調用ViewUtils.inject(this);

    下面我們再對比下Android中事件绑定的區別。

     1     @OnClick({ R.id.btn, R.id.img })
     2     public void clickMethod(View v) {
     3         Toast.makeText(SecondActivity.this, "you clicked button!",
     4                 Toast.LENGTH_SHORT).show();
     5     }
     6 
     7     @OnItemClick(R.id.list)
     8     public void itemClick(AdapterView<?> parent, View view, int position,long id) {
     9         Toast.makeText(SecondActivity.this, "position--->" + position,
    10                 Toast.LENGTH_SHORT).show();
    11     }
    ViewUtils
     1 btn.setOnClickListener(this);
     2         list.setOnItemClickListener(new OnItemClickListener() {
     3             @Override
     4             public void onItemClick(AdapterView<?> parent, View view,
     5                     int position, long id) {
     6                 Toast.makeText(SecondActivity.this, "position--->" + position,
     7                         Toast.LENGTH_SHORT).show();
     8             }
     9         });
    10     @Override
    11     public void onClick(View v) {
    12         switch (v.getId()) {
    13         case R.id.btn:
    14             Toast.makeText(SecondActivity.this, "you clicked button!",
    15                     Toast.LENGTH_SHORT).show();
    16             break;
    17         default:
    18             break;
    19         }
    20     }
    Normal

    原本绑定Button的監聽事件要麼用醜陋的內部類,要麼Activity實現OnClickListener,在复寫的onClick方法中去根據id。而xUtils只要通過簡單的一句注解就能實現監聽事件的功能,而且可以實現多個控件共用一個監聽方法。同時xUtils提供onClick、onItemClick、onLongClick等15種事件監聽注解。

    注意:在使用注解監聽事件的時候,監聽方法名是自定義的,但是一定要保證方法的訪問修飾符为public,同時方法的参數要與Android原來的監聽方法参數一致,不僅参數類型,而且要保證参數的順序。

  • 相关阅读:
    【React Native】某个页面禁用物理返回键
    【React Native】DeviceEventEmitter监听通知及带参数传值
    转载【React Native代码】手写验证码倒计时组件
    【React Native】 中设置 APP 名称、应用图标、为安卓添加启动图
    【React Native错误集】* What went wrong: Execution failed for task ':app:installDebug'.
    【React Native错误集】Import fails with "Failed to execute 'ImportScripts' on 'WorkerGlobalScope'"
    【React Native错误集】Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start of app
    「React Native笔记」在React的 setState 中操作数组和对象的多种方法(合集)
    【React Native】Error: Attribute application@allowBackup value=(false) from AndroidManifest.xml
    坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?
  • 原文地址:https://www.cnblogs.com/Miami/p/4140901.html
Copyright © 2011-2022 走看看