注解框架html
使用@EBean的JavaBean,能直接取到调用他的Context,支持@ViewById标签找到控件,所以,构造方法传过来的参数能够少不少。
上代码:java
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中的调用方法:android
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)); } } |