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

来源:互联网 发布:金山手机数据恢复 编辑:程序博客网 时间:2024/06/05 20:50

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

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

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

在Activity中的调用方法:

  1. package com.example.androidannotations;
  2.  
  3. import android.app.Activity;
  4. import android.text.Editable;
  5. import android.widget.EditText;
  6. import android.widget.TextView;
  7.  
  8. import com.googlecode.androidannotations.annotations.AfterTextChange;
  9. import com.googlecode.androidannotations.annotations.AfterViews;
  10. import com.googlecode.androidannotations.annotations.Bean;
  11. import com.googlecode.androidannotations.annotations.Click;
  12. import com.googlecode.androidannotations.annotations.EActivity;
  13. import com.googlecode.androidannotations.annotations.Fullscreen;
  14. import com.googlecode.androidannotations.annotations.NoTitle;
  15. import com.googlecode.androidannotations.annotations.UiThread;
  16. import com.googlecode.androidannotations.annotations.ViewById;
  17. import com.googlecode.androidannotations.annotations.res.StringRes;
  18.  
  19. //Eactivity注释可以设置Layout,相当于setConentView方法
  20. @EActivity(R.layout.activity_main)
  21. @Fullscreen
  22. @NoTitle
  23. public class MainActivity extends Activity {
  24. //ViewById注释功能与findViewById相同,如果声明的变量名就是id,可以省去参数,否则应加上id,如ViewById(R.id.tv)
  25. @ViewById
  26. TextView tv;
  27. @ViewById
  28. EditText edit;
  29. @StringRes(R.string.hello_world)
  30. String hello;
  31. //需要使用@Bean标签
  32. @Bean
  33. Student stu;
  34. //AfterViews注释定义的方法会在OnCreate方法的setContentView后执行
  35. @AfterViews
  36. void init()
  37. {
  38. tv.setText("asfsdf");
  39. }
  40. //在EditText内容改变时,更新TextView内容
  41. @AfterTextChange(R.id.edit)
  42. void afterEditChange(Editable text, TextView hello)
  43. {
  44. tv.setText(hello.getText());
  45. }
  46. //点击TextView时调用
  47. @Click(R.id.tv)
  48. void tvClicked()
  49. {
  50. stu.Toast();
  51. stu.backThread();
  52. }
  53. //在stu中也可以回调这个方法来更新UI
  54. @UiThread
  55. public void updateTv(int i)
  56. {
  57. tv.setText(String.valueOf(i));
  58. }
  59.  
  60. }
  61.  
0 0
原创粉丝点击