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