您的位置:首页 > 编程语言 > Java开发

androidannotions开发框架在Eclipse中的配置

2015-12-22 17:44 609 查看
1.首先前去下载androidannotions所对应的jar包
网址:https://github.com/excilys/androidannotations/wiki/Download



2.对Eclipse中所选中的项目进行jar包的配置,可以新建一个文件夹放置,截图如下:



3.右键单击项目,选择属性,并进行后面的勾选,导入jar包



4.对所应用的Activity或其他类,在配置文件AndroidManifest.xml中,进行后缀的下划线添加



5.最后clearn一下项目,进行后续的代码开发

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


其他点击事件:

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


@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框架可以专注于做逻辑开发,最主要是简化代码编写,容易维护。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: