Android 最火的快速開發架構AndroidAnnotations使用詳解

來源:互聯網
上載者:User

Android 最火的快速開發架構AndroidAnnotations使用詳解

 

Android 最火的快速開發架構androidannotations配置詳解文章中有eclipse配置步驟,Android 最火快速開發架構AndroidAnnotations簡介文章中的簡單介紹,本篇注重講解AndroidAnnotations中註解方法的使用。

@EActivity

樣本:

@EActivity(R.layout.main)public class MyActivity extends Activity {}
@fragment

樣本:


@EFragment(R.layout.my_fragment_layout) public class MyFragment extends Fragment { }
註冊:

建立:

MyFragment fragment = new MyFragment_();

普通類:

@EBeanpublic class MyClass {}

 

注意:這個類必須僅僅只能有一個建構函式,參數最多有一個context。

Activity中使用:

@EActivitypublic class MyActivity extends Activity {  @Bean  MyOtherClass myOtherClass;}

也可以用來聲明介面:

@Bean(MyImplementation.class)    MyInterface myInterface;

在普通類中還可以注入根環境:

@EBeanpublic class MyClass {  @RootContext  Context context;  // Only injected if the root context is an activity  @RootContext  Activity activity;  // Only injected if the root context is a service  @RootContext  Service service;  // Only injected if the root context is an instance of MyActivity  @RootContext  MyActivity myActivity;}

如果想在類建立時期做一些操作可以:

@AfterInject  public void doSomethingAfterInjection() {    // notificationManager and dependency are set  }

單例類需要如下聲明:

@EBean(scope = Scope.Singleton)public class MySingleton {}

注意:在單例類裡面不可以注入view和事件綁定,因為單例的生命週期比Activity和Service的要長,以免發生記憶體溢出。

@EView

@EViewpublic class CustomButton extends Button {        @App        MyApplication application;        @StringRes        String someStringResource;    public CustomButton(Context context, AttributeSet attrs) {        super(context, attrs);    }}

 

註冊:

建立:

CustomButton button = CustomButton_.build(context);

 

@EViewGroup

@EViewGroup(R.layout.title_with_subtitle)public class TitleWithSubtitle extends RelativeLayout {    @ViewById    protected TextView title, subtitle;    public TitleWithSubtitle(Context context, AttributeSet attrs) {        super(context, attrs);    }    public void setTexts(String titleText, String subTitleText) {        title.setText(titleText);        subtitle.setText(subTitleText);    }}

註冊:

@EApplication 
@EApplicationpublic class MyApplication extends Application {}
Activity中使用:
@EActivitypublic class MyActivity extends Activity {  @App  MyApplication application;}

@EService
@EServicepublic class MyService extends Service {}

跳轉service:
MyService_.intent(getApplication()).start();

停止service:
MyService_.intent(getApplication()).stop();

@EReceiver
@EReceiverpublic class MyReceiver extends BroadcastReceiver {}

@Receiver可以替代聲明BroadcastReceiver
@EActivitypublic class MyActivity extends Activity {  @Receiver(actions = org.androidannotations.ACTION_1)  protected void onAction1() {  }}

@EProvider
@EProviderpublic class MyContentProvider extends ContentProvider {}

@ViewById
@EActivitypublic class MyActivity extends Activity {  // Injects R.id.myEditText,變數名稱必須和布局的id名稱一致  @ViewById  EditText myEditText;  @ViewById(R.id.myTextView)  TextView textView;}

@AfterViews
@EActivity(R.layout.main)public class MyActivity extends Activity {    @ViewById    TextView myTextView;    @AfterViews    void updateTextWithDate() {
//一定要在這裡進行view的一些設定,不要在oncreate()中設定,因為oncreate()在執行時 view還沒有注入
myTextView.setText(Date: + new Date()); }[...]
@StringRes
@EActivitypublic class MyActivity extends Activity {  @StringRes(R.string.hello)  String myHelloString;//不能設定成私人變數  @StringRes  String hello;}

@ColorRes
@EActivitypublic class MyActivity extends Activity {  @ColorRes(R.color.backgroundColor)  int someColor;  @ColorRes  int backgroundColor;}

@AnimationRes
@EActivitypublic class MyActivity extends Activity {  @AnimationRes(R.anim.fadein)  XmlResourceParser xmlResAnim;  @AnimationRes  Animation fadein;}

@DimensionRes
@EActivitypublic class MyActivity extends Activity {  @DimensionRes(R.dimen.fontsize)  float fontSizeDimension;  @DimensionRes  float fontsize;}

@DImensionPixelOffsetRes
@EActivitypublic class MyActivity extends Activity {  @DimensionPixelOffsetRes(R.string.fontsize)  int fontSizeDimension;  @DimensionPixelOffsetRes  int fontsize;}

@DimensionPixelSizeRes
@EActivitypublic class MyActivity extends Activity {  @DimensionPixelSizeRes(R.string.fontsize)  int fontSizeDimension;  @DimensionPixelSizeRes  int fontsize;}

其他的Res:

  • @BooleanRes@ColorStateListRes@DrawableRes@IntArrayRes@IntegerRes@LayoutRes@MovieRes@TextRes@TextArrayRes@StringArrayRes@Extra

     

     

    @EActivitypublic class MyActivity extends Activity {  @Extra(myStringExtra)  String myMessage;  @Extra(myDateExtra)  Date myDateExtraWithDefaultValue = new Date();}

    或者:
    @EActivitypublic class MyActivity extends Activity {  // The name of the extra will be myMessage,名字必須一致  @Extra  String myMessage;}

    傳值:
    MyActivity_.intent().myMessage(hello).start() ;

    @SystemService
    @EActivitypublic class MyActivity extends Activity {//  @SystemService  NotificationManager notificationManager;}

    @HtmlRes
    @EActivitypublic class MyActivity extends Activity {  // Injects R.string.hello_html  @HtmlRes(R.string.hello_html)  Spanned myHelloString;  // Also injects R.string.hello_html  @HtmlRes  CharSequence helloHtml;}

    @FromHtml
    @EActivitypublic class MyActivity extends Activity {//必須用在TextView  @ViewById(R.id.my_text_view)  @FromHtml(R.string.hello_html)  TextView textView;  // Injects R.string.hello_html into the R.id.hello_html view  @ViewById  @FromHtml  TextView helloHtml;}

    @NonConfigurationInstance
    public class MyActivity extends Activity {//等同於 Activity.onRetainNonConfigurationInstance()  @NonConfigurationInstance  Bitmap someBitmap;  @NonConfigurationInstance  @Bean  MyBackgroundTask myBackgroundTask;}

    @HttpsClient
    @HttpsClient HttpClient httpsClient;

    樣本:
    @EActivitypublic class MyActivity extends Activity {    @HttpsClient(trustStore=R.raw.cacerts,        trustStorePwd=changeit,         hostnameVerif=true)    HttpClient httpsClient;    @AfterInject    @Background    public void securedRequest() {        try {            HttpGet httpget = new HttpGet(https://www.verisign.com/);            HttpResponse response = httpsClient.execute(httpget);            doSomethingWithResponse(response);        } catch (Exception e) {            e.printStackTrace();        }    }    @UiThread    public void doSomethingWithResponse(HttpResponse resp) {        Toast.makeText(this, HTTP status  + resp.getStatusLine().getStatusCode(), Toast.LENGTH_LONG).show();    }}

    @FragmentArg
    @EFragmentpublic class MyFragment extends Fragment {//等同於 Fragment Argument  @FragmentArg(myStringArgument)  String myMessage;  @FragmentArg  String anotherStringArgument;  @FragmentArg(myDateExtra)  Date myDateArgumentWithDefaultValue = new Date();}
    MyFragment myFragment = MyFragment_.builder()  .myMessage(Hello)  .anotherStringArgument(World)  .build();

    @Click
    @Click(R.id.myButton)void myButtonWasClicked() {    [...]}@Clickvoid anotherButton() {//如果不指定則函數名和id對應    [...]}@Clickvoid yetAnotherButton(View clickedView) {    [...]}
    其他點擊事件:

     

    Clicks with @Click
    Long clicks with @LongClick
    Touches with @Touch

    AdapterViewEvents
    Item clicks with @ItemClick
    Long item clicks with @ItemLongClick
    Item selection with @ItemSelect 有兩種方式調用: 1.

    @EActivity(R.layout.my_list)public class MyListActivity extends Activity {    // ...    @ItemClick    public void myListItemClicked(MyItem clickedItem) {//MyItem是adapter的實體類,等同於adapter.getItem(position)    }    @ItemLongClick    public void myListItemLongClicked(MyItem clickedItem) {    }    @ItemSelect    public void myListItemSelected(boolean selected, MyItem selectedItem) {    }}
    2.
    @EActivity(R.layout.my_list)public class MyListActivity extends Activity {    // ...    @ItemClick    public void myListItemClicked(int position) {//位置id    }    @ItemLongClick    public void myListItemLongClicked(int position) {    }    @ItemSelect    public void myListItemSelected(boolean selected, int position) {    }}

    @SeekBarProgressChange
    //等同於SeekBar.OnSeekBarChangeListener.onProgressChanged(SeekBar, int, boolean)
    @SeekBarProgressChange(R.id.seekBar) void onProgressChangeOnSeekBar(SeekBar seekBar, int progress, boolean fromUser) {    // Something Here } @SeekBarProgressChange(R.id.seekBar) void onProgressChangeOnSeekBar(SeekBar seekBar, int progress) {    // Something Here } @SeekBarProgressChange({R.id.seekBar1, R.id.seekBar2}) void onProgressChangeOnSeekBar(SeekBar seekBar) {    // Something Here } @SeekBarProgressChange({R.id.seekBar1, R.id.seekBar2}) void onProgressChangeOnSeekBar() {    // Something Here }@SeekBarTouchStart and @SeekBarTouchStop

    @SeekBarTouchStart 和 @SeekBarTouchStop接受開始和結束事件的監聽
    @TextChange
    @TextChange(R.id.helloTextView) void onTextChangesOnHelloTextView(CharSequence text, TextView hello, int before, int start, int count) {    // Something Here } @TextChange void helloTextViewTextChanged(TextView hello) {    // Something Here } @TextChange({R.id.editText, R.id.helloTextView}) void onTextChangesOnSomeTextViews(TextView tv, CharSequence text) {    // Something Here } @TextChange(R.id.helloTextView) void onTextChangesOnHelloTextView() {    // Something Here }

    @BeforeTextChange
    @BeforeTextChange(R.id.helloTextView) void beforeTextChangedOnHelloTextView(TextView hello, CharSequence text, int start, int count, int after) {    // Something Here } @BeforeTextChange void helloTextViewBeforeTextChanged(TextView hello) {    // Something Here } @BeforeTextChange({R.id.editText, R.id.helloTextView}) void beforeTextChangedOnSomeTextViews(TextView tv, CharSequence text) {    // Something Here } @BeforeTextChange(R.id.helloTextView) void beforeTextChangedOnHelloTextView() {    // Something Here }

    @AfterTextChange
    @AfterTextChange(R.id.helloTextView) void afterTextChangedOnHelloTextView(Editable text, TextView hello) {    // Something Here } @AfterTextChange void helloTextViewAfterTextChanged(TextView hello) {    // Something Here } @AfterTextChange({R.id.editText, R.id.helloTextView}) void afterTextChangedOnSomeTextViews(TextView tv, Editable text) {    // Something Here } @AfterTextChange(R.id.helloTextView) void afterTextChangedOnHelloTextView() {    // Something Here }

    @OptionsMenu和OptionsItem
    @EActivity@OptionsMenu(R.menu.my_menu)public class MyActivity extends Activity {    @OptionMenuItem    MenuItem menuSearch;    @OptionsItem(R.id.menuShare)        void myMethod() {          // You can specify the ID in the annotation, or use the naming convention        }    @OptionsItem    void homeSelected() {      // home was selected in the action bar          // The Selected keyword is optional    }    @OptionsItem    boolean menuSearch() {          menuSearch.setVisible(false);          // menuSearch was selected          // the return type may be void or boolean (false to allow normal menu processing to proceed, true to consume it here)          return true;    }    @OptionsItem({ R.id.menu_search, R.id.menu_delete })    void multipleMenuItems() {      // You can specify multiple menu item IDs in @OptionsItem    }    @OptionsItem    void menu_add(MenuItem item) {      // You can add a MenuItem parameter to access it    }}

    或者:
    @EActivity@OptionsMenu({R.menu.my_menu1, R.menu.my_menu2})public class MyActivity extends Activity {}

    @Background執行:
    void myMethod() {    someBackgroundWork(hello, 42);}@Backgroundvoid someBackgroundWork(String aParam, long anotherParam) {    [...]}

    取消:
    void myMethod() {    someCancellableBackground(hello, 42);    [...]    boolean mayInterruptIfRunning = true;    BackgroundExecutor.cancelAll(cancellable_task, mayInterruptIfRunning);}@Background(id=cancellable_task)void someCancellableBackground(String aParam, long anotherParam) {    [...]}

    非並發執行:
    void myMethod() {    for (int i = 0; i < 10; i++)        someSequentialBackgroundMethod(i);}@Background(serial = test)void someSequentialBackgroundMethod(int i) {    SystemClock.sleep(new Random().nextInt(2000)+1000);    Log.d(AA, value :  + i);}

    延遲:
    @Background(delay=2000)void doInBackgroundAfterTwoSeconds() {}

    @UiThreadUI線程:
    void myMethod() {    doInUiThread(hello, 42);}@UiThreadvoid doInUiThread(String aParam, long anotherParam) {    [...]}

    延遲:
    @UiThread(delay=2000)void doInUiThreadAfterTwoSeconds() {}

    最佳化UI線程:
    @UiThread(propagation = Propagation.REUSE)void runInSameThreadIfOnUiThread() {}

    進度值改變:
    @EActivitypublic class MyActivity extends Activity {  @Background  void doSomeStuffInBackground() {    publishProgress(0);    // Do some stuff    publishProgress(10);    // Do some stuff    publishProgress(100);  }  @UiThread  void publishProgress(int progress) {    // Update progress views  }}

    @OnActivityResult
    @OnActivityResult(REQUEST_CODE) void onResult(int resultCode, Intent data) { } @OnActivityResult(REQUEST_CODE) void onResult(int resultCode) { } @OnActivityResult(ANOTHER_REQUEST_CODE) void onResult(Intent data) { } @OnActivityResult(ANOTHER_REQUEST_CODE) void onResult() { }

     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.