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 {
}

注冊:

<fragment
android:id="@+id/myFragment"
android:name="com.company.MyFragment_"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

创建:

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);
}
}

注冊:

<com.androidannotations.view.CustomButton_
android:layout_width="match_parent"
android:layout_height="wrap_content" />

创建:

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);
} }

注冊:

<com.androidannotations.viewgroup.TitleWithSubtitle_
android:id="@+id/firstTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

@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 = 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 = 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) {
[...]
}

其它点击事件:

AdapterViewEvents

有两种方式调用:

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 和 @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() {
}

@UiThread
UI线程:
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维护。
或者留言。转载务必注明出处。




Android 最火高速开发框架AndroidAnnotations使用具体解释的更多相关文章

  1. Android 最火高速开发框架AndroidAnnotations简单介绍

    在上一篇Android 最火的高速开发框架androidannotations配置具体解释中介绍了在eclipse中配置androidannotation的步骤,如需配置请參考. 1.目标 andro ...

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

    Android 最火的高速开发框架androidannotations配置具体解释文章中有eclipse配置步骤.Android 最火高速开发框架AndroidAnnotations简介文章中的简介. ...

  3. Android框架之高速开发框架xUtil

    做Android开发我们通常是从原生态的開始,就是调用默认那些Android代码来开发我们的应用,可是到了一定程度,我们就想着怎么来高速开发我们的应用.这个时候我们就要着手来研究框架了. 以下介绍一个 ...

  4. Android 最火的高速开发框架xUtils

    Github下载地址:https://github.com/wyouflf/xUtils xUtils简单介绍 xUtils 包括了非常多有用的Android工具. xUtils 最初源于Afinal ...

  5. 9款Android经常使用的高速开发框架

    1.Afinal框架 项目地址:https://github.com/yangfuhai/afinal 项目地址:http://www.oschina.net/p/afinal 主要有四大模块:  ( ...

  6. Android开发框架androidannotations的使用

    Android开发框架AndroidAnnotations,它除了有依赖注入的特性以外,还集成了Ormlite,Spring-android中的REST模板.使用起来非常方便,大大提高了开发效率. 使 ...

  7. 【转】Android 最火的快速开发框架XUtils

    原文:http://blog.csdn.net/rain_butterfly/article/details/37812371 最近搜了一些框架供初学者学习,比较了一下XUtils是目前git上比较活 ...

  8. 看大师解说Android高速开发框架EasyAndroid

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u010966622/article/details/37601789 前几天做了小应用.感觉小有成就 ...

  9. android mvp高速开发框架介绍(dileber的简单介绍)

    今天我为大家介绍一款android mvp框架:dileber(https://github.com/dileber/dileber.git) 官方交流qq群:171443726 我个人qq:2971 ...

随机推荐

  1. NET Core 1.0

    VS Code从零开始开发调试.NET Core 1.0 使用VS Code 从零开始开发调试.NET Core 1.0. .NET Core 是一个开源的.跨平台的 .NET 实现. VS Code ...

  2. php函数参数

    函数的参数 通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表.参数是从左向右求值的. PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数.也支持可变长度参数列表,更多信息参见 ...

  3. Hdu 1175 连连看(DFS)

    Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175 因为题目只问能不能搜到,没问最少要几个弯才能搜到,所以我采取了DFS. 因为与Hdu ...

  4. Kafka介绍

    本文介绍LinkedIn开源的Kafka,久仰大名了,依照其官方文档做些翻译和二次创作.相应能够查看整份官方文档. 基本术语 topics,维护的消息源种类(更像是业务上的数据种类/分类) produ ...

  5. Android的BUG(二) - SurfaceTexture中的野指针

    当初遇到这个bug,是不定期的低概率出现,最后找到一个比较容易重现的步骤: 启动系统 然后进google +  新建一个帐号(注意是新建一个帐号)  没几步就重启了 这个BUG,一开始追踪也是无头绪的 ...

  6. C# 客户端服务端的编写

    客户端的代码 class client { public void mehod() { TcpClient tcp = new TcpClient(); tcp.Connect(IPAddress.P ...

  7. 变相的取消Datagridview控件的选中状态

    思路:把每一列的文字颜色设为黑色,选中时候的背景为白色,颜色为黑色.每一列都这样设置,那么变相的达到了取消选中效果. 图:

  8. Java进阶03 IO基础

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/11/3000905.html 作者:Vamei 出处:http://www.cnblogs.com ...

  9. Ibatis调用存储过程实现增删改以及分页查询

    1.Ibatis实现增删改操作很简单了,通常我是将某一模块的增删改功能写在一个存储过程里,通过一个标识符去区分执行增加还是修改抑或删除操作. statement: <!-- 存储过程:实现学生的 ...

  10. IOS SWIFT 简单操作文件

    //Home目录 let homeDirectory = NSHomeDirectory() //Documents目录 苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备 ...