注解框架 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));
  }
 
 
}