zoukankan      html  css  js  c++  java
  • 3. Android框架和工具之 xUtils(ViewUtils )

    1. ViewUtils 作用:

    • 完全注解方式就可以进行UI绑定和事件绑定。
    • 无需findViewById和setClickListener等。

    2. UI绑定 和 事件绑定

    (1)UI绑定

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

    注解的方式绑定ID

     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     }

    使用findViewById绑定ID

     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     }

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

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

    (2)事件绑定
    下面我們看下具體的代碼,順便對比下两种事件绑定:

    使用ViewUtils

     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     }

    平常Android的事件绑定

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

    3. ViewUtils 基本使用:

     (1)新建一个Android工程,命名为"ViewUtils",如下:

    (2)首先我们来到布局文件之中:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical"
     6     tools:context="com.himi.viewutils.MainActivity" >
     7 
     8     <LinearLayout
     9         android:layout_width="match_parent"
    10         android:layout_height="wrap_content"
    11         android:orientation="horizontal" >
    12 
    13         <Button
    14             android:id="@+id/button1"
    15             android:layout_width="0dp"
    16             android:layout_height="wrap_content"
    17             android:layout_weight="1"
    18             android:text="按钮1" />
    19 
    20         <Button
    21             android:id="@+id/button2"
    22             android:layout_width="0dp"
    23             android:layout_height="wrap_content"
    24             android:layout_weight="1"
    25             android:text="按钮2" />
    26     </LinearLayout>
    27 
    28     <ListView
    29         android:id="@+id/lv"
    30         android:layout_width="match_parent"
    31         android:layout_height="match_parent" >
    32     </ListView>
    33 
    34 </LinearLayout>

    (3)接着来到MainActivity,如下:

     1 package com.himi.viewutils;
     2 
     3 import com.lidroid.xutils.ViewUtils;
     4 import com.lidroid.xutils.view.annotation.ViewInject;
     5 import com.lidroid.xutils.view.annotation.event.OnClick;
     6 import com.lidroid.xutils.view.annotation.event.OnItemClick;
     7 
     8 import android.app.Activity;
     9 import android.os.Bundle;
    10 import android.view.View;
    11 import android.widget.AdapterView;
    12 import android.widget.ArrayAdapter;
    13 import android.widget.Button;
    14 import android.widget.ListView;
    15 import android.widget.Toast;
    16 
    17 public class MainActivity extends Activity {
    18     
    19     private String[] data = {
    20         "吕布","赵云","关羽","张飞","许褚","马超"    
    21     };
    22     
    23     /**
    24      * 注入View到Activity
    25      */
    26     
    27     @ViewInject(R.id.button1)
    28     private Button button1;
    29     
    30     @ViewInject(R.id.button2)
    31     private Button button2;
    32     
    33     @ViewInject(R.id.lv)
    34     private ListView lv;
    35     
    36     
    37 
    38     @Override
    39     protected void onCreate(Bundle savedInstanceState) {
    40         super.onCreate(savedInstanceState);
    41         setContentView(R.layout.activity_main);
    42         //不能少
    43         ViewUtils.inject(this);
    44         
    45         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    46                 android.R.layout.simple_list_item_1, data);
    47         lv.setAdapter(adapter);
    48         
    49         
    50         
    51     }
    52     
    53     @OnClick({R.id.button1,R.id.button2})
    54     public void click(View v) {//点击方法名可以随意取
    55         if(v.getId() == R.id.button1) {
    56             Toast.makeText(this, "点击了按钮1", 0).show();
    57         } 
    58         if(v.getId() == R.id.button2) {
    59             Toast.makeText(this, "点击了按钮2", 0).show();
    60         } 
    61     }
    62     
    63     @OnItemClick(R.id.lv)//item点击方面名随便取
    64     public void itemClick(AdapterView<?> parent, View view, 
    65             int position,long id) {
    66         Toast.makeText(this, "你点击了按钮了 "+data[position], 0).show();
    67     }
    68 
    69     
    70 }

    上面没有使用到 网络 和 SD卡,没有必要添加权限

    (4)布署程序到手机上,如下:

    4. 上面使用到的是注入View 到Activity,其实还有很多种注入View的方式,如下:

    // xUtils的view注解要求必须提供id,以使代码混淆不受影响。
    @ViewInject(R.id.textView)
        TextView textView;
    
    //@ViewInject(vale=R.id.textView, parentId=R.id.parentView)
        //TextView textView;
    
    @ResInject(id = R.string.label, type = ResType.String)
        private String label;
    
    // 取消了之前使用方法名绑定事件的方式,使用id绑定不受混淆影响
    // 支持绑定多个id @OnClick({R.id.id1, R.id.id2, R.id.id3})
    // or @OnClick(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3})
    // 更多事件支持参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
    @OnClick(R.id.test_button)
    public void testButtonClick(View v) { // 方法签名必须和接口中的要求一致
        ...
    }
    ...
    //在Activity中注入
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ViewUtils.inject(this); //注入view和事件
        ...
        textView.setText("some text...");
        ...
    }
    //在Fragment中注入
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.bitmap_fragment, container, false); // 加载fragment布局
        ViewUtils.inject(this, view); //注入view和事件
        ...
    }
    //在PreferenceFragment中注入
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ViewUtils.inject(this, getPreferenceScreen()); //注入view和事件
        ...
    }
    // 其他重载
    // inject(View view);
    // inject(Activity activity)
    // inject(PreferenceActivity preferenceActivity)
    // inject(Object handler, View view)
    // inject(Object handler, Activity activity)
    // inject(Object handler, PreferenceGroup preferenceGroup)
    // inject(Object handler, PreferenceActivity preferenceActivity)
  • 相关阅读:
    Hadoop的三大组件 内容
    常用的linux命令
    shell学习心得
    liunx学习心得。
    随机数
    HADOOP框架
    Shell学习心得
    linux学习心得
    jquery解决随机点餐系统重复问题
    在码云上git push时报错,出现error: failed to push some refs to 'https://gitee.com/lipengyangzuishuai/gitstudy.git'的解决办法
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5439068.html
Copyright © 2011-2022 走看看