zoukankan      html  css  js  c++  java
  • 注解框架

    注解框架

    AndroidAnnotations框架@Ebean,@RootContext,@Background,@UiThread,@AfterInject,@AfterTextChange标签的使用方法

    使用@EBean的JavaBean,能直接取到调用他的Context,支持@ViewById标签找到控件,因此,构造方法传过来的参数可以少很多。 
    上代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    package com.example.androidannotations;
     
    import android.content.Context;
    import android.widget.TextView;
    import android.widget.Toast;
     
    import com.googlecode.androidannotations.annotations.AfterInject;
    import com.googlecode.androidannotations.annotations.Background;
    import com.googlecode.androidannotations.annotations.EBean;
    import com.googlecode.androidannotations.annotations.RootContext;
    import com.googlecode.androidannotations.annotations.UiThread;
    import com.googlecode.androidannotations.annotations.ViewById;
     
    @EBean
    public class Student {
      //RootContext能取到调用该Bean的Context,构造方法不再需要传Context参数
      @RootContext
      Context context;
      @RootContext
      MainActivity activity;
      //ViewById也能在这里直接使用
      @ViewById
      TextView tv;
      public void Toast()
      {
        Toast.makeText(context, "在Ebean中调用", Toast.LENGTH_LONG).show();
      }
      //后台线程执行
      @Background
      public void backThread()
      {
        for(int i=0;i<9999;i++)
        {
          try {
            Thread.sleep(1000);
    //				activity.updateTv(i);
            //更新UI,调用在UI线程执行的方法
            updateTv(i);
          } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
     
        }
      }
      //UiThread在UI线程执行
      @UiThread
      public void updateTv(int i)
      {
        tv.setText(String.valueOf(i));
      }
      //AfterInject在构造方法执行完成后执行
      @AfterInject
      public void doSomethingAfterInject()
      {
        System.out.println("Student AfterInject");
      }
     
    }

    在Activity中的调用方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    package com.example.androidannotations;
     
    import android.app.Activity;
    import android.text.Editable;
    import android.widget.EditText;
    import android.widget.TextView;
     
    import com.googlecode.androidannotations.annotations.AfterTextChange;
    import com.googlecode.androidannotations.annotations.AfterViews;
    import com.googlecode.androidannotations.annotations.Bean;
    import com.googlecode.androidannotations.annotations.Click;
    import com.googlecode.androidannotations.annotations.EActivity;
    import com.googlecode.androidannotations.annotations.Fullscreen;
    import com.googlecode.androidannotations.annotations.NoTitle;
    import com.googlecode.androidannotations.annotations.UiThread;
    import com.googlecode.androidannotations.annotations.ViewById;
    import com.googlecode.androidannotations.annotations.res.StringRes;
     
    //Eactivity注释可以设置Layout,相当于setConentView方法
    @EActivity(R.layout.activity_main)
    @Fullscreen
    @NoTitle
    public class MainActivity extends Activity {
      //ViewById注释功能与findViewById相同,如果声明的变量名就是id,可以省去参数,否则应加上id,如ViewById(R.id.tv)
     
      @ViewById
      TextView tv;
      @ViewById
      EditText edit;
      @StringRes(R.string.hello_world)
      String hello;
      //需要使用@Bean标签
      @Bean
      Student stu;
      //AfterViews注释定义的方法会在OnCreate方法的setContentView后执行
      @AfterViews
      void init()
      {
        tv.setText("asfsdf");
      }
      //在EditText内容改变时,更新TextView内容
      @AfterTextChange(R.id.edit)
      void afterEditChange(Editable text, TextView hello)
      {
        tv.setText(hello.getText());
      }
      //点击TextView时调用
      @Click(R.id.tv)
      void tvClicked()
      {
        stu.Toast();
        stu.backThread();
      }
      //在stu中也可以回调这个方法来更新UI
      @UiThread
      public void updateTv(int i)
      {
        tv.setText(String.valueOf(i));
      }
     
     
    }
  • 相关阅读:
    Golang 读写文件的操作
    初始 Elasticsearch
    数据存储单位的换算(bytes、KB MB GB TB PB EB ZB YB DB NB)
    Go 语言类型元信息的通用结构 _type
    空接口
    HashMap和Hashtable的区别
    谈谈final, finally, finalize的区别
    理解AOP
    Struts2 OGNL概述
    Struts2原理
  • 原文地址:https://www.cnblogs.com/conncui/p/4376270.html
Copyright © 2011-2022 走看看