Android 最火的高速开发框架AndroidAnnotations使用具体解释

缥帙各舒散,前后互相逾。这篇文章主要讲述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_();


普通类:
@EBean public class MyClass {}



注意:这个类必须只只能有一个构造函数。參数最多有一个context。Activity中使用:
@EActivity public class MyActivity extends Activity {@Bean MyOtherClass myOtherClass; }


也能够用来声明接口:
@Bean(MyImplementation.class) MyInterface myInterface;


在普通类中还能够注入根环境:
@EBean public 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
@EView public class CustomButton extends Button {@App MyApplication application; @StringRes String someStringResource; public CustomButton(Context context, AttributeSet attrs) { super(context, attrs); } }

【Android 最火的高速开发框架AndroidAnnotations使用具体解释】

注冊:
创建:
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
@EApplication public class MyApplication extends Application {}

Activity中使用:
@EActivity public class MyActivity extends Activity {@App MyApplication application; }


@EService
@EService public class MyService extends Service {}


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


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


@EReceiver
@EReceiver public class MyReceiver extends BroadcastReceiver {}


@Receiver能够替代声明BroadcastReceiver
@EActivity public class MyActivity extends Activity {@Receiver(actions = "org.androidannotations.ACTION_1") protected void onAction1() {}}


@EProvider
@EProvider public class MyContentProvider extends ContentProvider {}


@ViewById
@EActivity public 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
@EActivity public class MyActivity extends Activity {@StringRes(R.string.hello) String myHelloString; //不能设置成私有变量@StringRes String hello; }


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


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


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


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


@DimensionPixelSizeRes
@EActivity public 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


@EActivity public class MyActivity extends Activity {@Extra("myStringExtra") String myMessage; @Extra("myDateExtra") Date myDateExtraWithDefaultValue = https://www.songbingjia.com/android/new Date(); }


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


传值:
MyActivity_.intent().myMessage("hello").start() ;


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


@htmlRes
@EActivity public 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
@EActivity public 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;



演示样例:
@EActivity public 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
@EFragment public class MyFragment extends Fragment {//等同于 Fragment Argument@FragmentArg("myStringArgument") String myMessage; @FragmentArg String anotherStringArgument; @FragmentArg("myDateExtra") Date myDateArgumentWithDefaultValue = https://www.songbingjia.com/android/new Date(); }

MyFragment myFragment = MyFragment_.builder() .myMessage("Hello") .anotherStringArgument("World") .build();


@Click
@Click(R.id.myButton) void myButtonWasClicked() { [...] } @Click void anotherButton() {//假设不指定则函数名和id相应 [...] } @Click void 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); }@Background void 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); }@UiThread void doInUiThread(String aParam, long anotherParam) { [...] }


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


优化UI线程:
@UiThread(propagation = Propagation.REUSE) void runInSameThreadIfOnUiThread() { }


进度值改变:
@EActivity public 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() { }


以上的凝视使用方法基本包括了寻常程序中的事件绑定。用AndroidAnnotations框架能够专注于做逻辑开发。最主要是简化代码编写。easy维护。
如有问题能够參考官方文档https://github.com/excilys/androidannotations/wiki/Cookbook,或者留言。转载务必注明出处。


原文链接:http://www.bkjia.com/Androidjc/868503.html
































































    推荐阅读