Android 最火的快速开发框架AndroidAnnotations使用详解
来源:互联网 发布:windows连不上无线网 编辑:程序博客网 时间:2024/05/14 13:33
Android 最火的快速开发框架androidannotations配置详解文章中有eclipse配置步骤,Android 最火快速开发框架AndroidAnnotations简介文章中的简单介绍,本篇注重讲解AndroidAnnotations中注解方法的使用。
@EActivity
示例:
1
2
3
4
@EActivity
(R.layout.main)
public
class
MyActivity
extends
Activity {
}
示例:
1
2
3
<pre
class
=
"brush:java;"
>
@EFragment
(R.layout.my_fragment_layout)
public
class
MyFragment
extends
Fragment {
}</pre>
1
<fragment android:id=
"@+id/myFragment"
android:name=
"com.company.MyFragment_"
android:layout_width=
"fill_parent"
android:layout_height=
"fill_parent"
></fragment>
创建:
1
MyFragment fragment =
new
MyFragment_();
普通类:
1
2
3
4
@EBean
public
class
MyClass {
}
Activity中使用:
1
2
3
4
5
6
7
@EActivity
public
class
MyActivity
extends
Activity {
@Bean
MyOtherClass myOtherClass;
}
也可以用来声明接口:
1
2
@Bean
(MyImplementation.
class
)
MyInterface myInterface;
在普通类中还可以注入根环境:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@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;
}
如果想在类创建时期做一些操作可以:
1
2
3
4
@AfterInject
public
void
doSomethingAfterInjection() {
// notificationManager and dependency are set
}
单例类需要如下声明:
1
2
3
4
@EBean
(scope = Scope.Singleton)
public
class
MySingleton {
}
注意:在单例类里面不可以注入view和事件绑定,因为单例的生命周期比Activity和Service的要长,以免发生内存溢出。
@EView
1
2
3
4
5
6
7
8
9
10
11
12
13
@EView
public
class
CustomButton
extends
Button {
@App
MyApplication application;
@StringRes
String someStringResource;
public
CustomButton(Context context, AttributeSet attrs) {
super
(context, attrs);
}
}
注册:
1
<com.androidannotations.view.custombutton_ android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
></com.androidannotations.view.custombutton_>
创建:
1
CustomButton button = CustomButton_.build(context);
@EViewGroup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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);
}
}
注册:
1
<com.androidannotations.viewgroup.titlewithsubtitle_ android:id=
"@+id/firstTitle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
></com.androidannotations.viewgroup.titlewithsubtitle_>
@EApplication
1234@EApplication
public
class
MyApplication
extends
Application {
}
Activity中使用:1
2
3
4
@EApplication
public
class
MyApplication
extends
Application {
}
1
2
3
4
5
6
7
@EActivity
public
class
MyActivity
extends
Activity {
@App
MyApplication application;
}
@EService
1
2
3
4
@EService
public
class
MyService
extends
Service {
}
跳转service:
1
MyService_.intent(getApplication()).start();
停止service:
1
MyService_.intent(getApplication()).stop();
@EReceiver
1
2
3
4
@EReceiver
public
class
MyReceiver
extends
BroadcastReceiver {
}
@Receiver可以替代声明BroadcastReceiver
1
2
3
4
5
6
7
8
9
@EActivity
public
class
MyActivity
extends
Activity {
@Receiver
(actions =
"org.androidannotations.ACTION_1"
)
protected
void
onAction1() {
}
}
@EProvider
1
2
3
4
@EProvider
public
class
MyContentProvider
extends
ContentProvider {
}
@ViewById
1
2
3
4
5
6
7
8
9
10
@EActivity
public
class
MyActivity
extends
Activity {
// Injects R.id.myEditText,变量名称必须和布局的id名称一致
@ViewById
EditText myEditText;
@ViewById
(R.id.myTextView)
TextView textView;
}
@AfterViews
1
2
3
4
5
6
7
8
@EActivity
(R.layout.main)
public
class
MyActivity
extends
Activity {
@ViewById
TextView myTextView;
@AfterViews
void
updateTextWithDate() {<pre
class
=
"brush:java;"
>
//一定要在这里进行view的一些设置,不要在oncreate()中设置,因为oncreate()在执行时 view还没有注入</pre> myTextView.setText("Date: " + new Date()); }[...]
@StringRes
1
2
3
4
5
6
7
8
9
10
@EActivity
public
class
MyActivity
extends
Activity {
@StringRes
(R.string.hello)
String myHelloString;
//不能设置成私有变量
@StringRes
String hello;
}
@ColorRes
1
2
3
4
5
6
7
8
9
10
@EActivity
public
class
MyActivity
extends
Activity {
@ColorRes
(R.color.backgroundColor)
int
someColor;
@ColorRes
int
backgroundColor;
}
@AnimationRes
1
2
3
4
5
6
7
8
9
10
@EActivity
public
class
MyActivity
extends
Activity {
@AnimationRes
(R.anim.fadein)
XmlResourceParser xmlResAnim;
@AnimationRes
Animation fadein;
}
@DimensionRes
1
2
3
4
5
6
7
8
9
10
@EActivity
public
class
MyActivity
extends
Activity {
@DimensionRes
(R.dimen.fontsize)
float
fontSizeDimension;
@DimensionRes
float
fontsize;
}
@DImensionPixelOffsetRes
1
2
3
4
5
6
7
8
9
10
@EActivity
public
class
MyActivity
extends
Activity {
@DimensionPixelOffsetRes
(R.string.fontsize)
int
fontSizeDimension;
@DimensionPixelOffsetRes
int
fontsize;
}
@DimensionPixelSizeRes
1
2
3
4
5
6
7
8
9
10
@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
@Extra12345678910@EActivity
public
class
MyActivity
extends
Activity {
@Extra
(
"myStringExtra"
)
String myMessage;
@Extra
(
"myDateExtra"
)
Date myDateExtraWithDefaultValue =
new
Date();
}
或者:1234567@EActivity
public
class
MyActivity
extends
Activity {
// The name of the extra will be "myMessage",名字必须一致
@Extra
String myMessage;
}
传值:1MyActivity_.intent().myMessage(
"hello"
).start() ;
@SystemService123456@EActivity
public
class
MyActivity
extends
Activity {
//
@SystemService
NotificationManager notificationManager;
}
@HtmlRes123456789101112@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;
}
@FromHtml12345678910111213@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;
}
@NonConfigurationInstance12345678910public
class
MyActivity
extends
Activity {
//等同于 Activity.onRetainNonConfigurationInstance()
@NonConfigurationInstance
Bitmap someBitmap;
@NonConfigurationInstance
@Bean
MyBackgroundTask myBackgroundTask;
}
@HttpsClient12<pre
class
=
"brush:java;"
>
@HttpsClient
HttpClient httpsClient;</pre>
示例:12345678910111213141516171819202122232425@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();
}
}
@FragmentArg12345678910111213@EFragment
public
class
MyFragment
extends
Fragment {
//等同于 Fragment Argument
@FragmentArg
(
"myStringArgument"
)
String myMessage;
@FragmentArg
String anotherStringArgument;
@FragmentArg
(
"myDateExtra"
)
Date myDateArgumentWithDefaultValue =
new
Date();
}
1234MyFragment myFragment = MyFragment_.builder()
.myMessage(
"Hello"
)
.anotherStringArgument(
"World"
)
.build();
@Click123456789101112@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.123456789101112131415161718192021@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.123456789101112131415161718192021@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) {
}
}
@SeekBarProgressChange1<pre
class
=
"brush:java;"
>
//等同于SeekBar.OnSeekBarChangeListener.onProgressChanged(SeekBar, int, boolean)</pre>
12345678910111213141516171819@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接受开始和结束事件的监听
@TextChange12345678910111213141516171819@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
}
@BeforeTextChange12345678910111213141516171819@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
}
@AfterTextChange12345678910111213141516171819@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和OptionsItem123456789101112131415161718192021222324252627282930313233343536@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
}
}
或者:12345@EActivity
@OptionsMenu
({R.menu.my_menu1, R.menu.my_menu2})
public
class
MyActivity
extends
Activity {
}
@Background执行:12345678void
myMethod() {
someBackgroundWork(
"hello"
,
42
);
}
@Background
void
someBackgroundWork(String aParam,
long
anotherParam) {
[...]
}
取消:1234567891011void
myMethod() {
someCancellableBackground(
"hello"
,
42
);
[...]
boolean
mayInterruptIfRunning =
true
;
BackgroundExecutor.cancelAll(
"cancellable_task"
, mayInterruptIfRunning);
}
@Background
(id=
"cancellable_task"
)
void
someCancellableBackground(String aParam,
long
anotherParam) {
[...]
}
非并发执行:12345678910void
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);
}
延迟:123@Background
(delay=
2000
)
void
doInBackgroundAfterTwoSeconds() {
}
@UiThreadUI线程:12345678void
myMethod() {
doInUiThread(
"hello"
,
42
);
}
@UiThread
void
doInUiThread(String aParam,
long
anotherParam) {
[...]
}
延迟:123@UiThread
(delay=
2000
)
void
doInUiThreadAfterTwoSeconds() {
}
优化UI线程:123@UiThread
(propagation = Propagation.REUSE)
void
runInSameThreadIfOnUiThread() {
}
进度值改变:123456789101112131415161718@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
}
}
@OnActivityResult123456789101112131415@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框架可以专注于做逻辑开发,最主要是简化代码编写,容易维护。如有问题可以参考官方文档https://github.com/excilys/androidannotations/wiki/Cookbook,或者留言。转载务必注明出处。
- Item clicks with
- Clicks with
0 0
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火快速开发框架AndroidAnnotations使用详解
- Android 最火快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架androidannotations配置详解
- Android 最火的快速开发框架androidannotations配置详解
- Android 最火的快速开发框架androidannotations配置详解
- Android 最火的快速开发框架androidannotations配置详解
- Android 最火的快速开发框架androidannotations配置详解
- Android 最火的快速开发框架androidannotations配置详解
- 1.13接口卡
- 4月4日,Decode,每日20行。
- B/S(Web)实时通讯解决方案
- there is no staged files
- 1457: 棋盘游戏
- Android 最火的快速开发框架AndroidAnnotations使用详解
- 前端大牛得到的最佳职业生涯建议
- 网络层--地址解析协议ARP
- 1.14各类存储器芯片
- MySQL的3种应用方式和3种数据库用途
- Android冷启动白屏黑屏处理
- Java实现的矩阵类及矩阵的转置,加减乘和矩阵求逆
- 记录Building an MFC project for a non-Unicode character set is deprecated
- 网络层-IP数据报的格式