Android快速開発フレームワークandroidannotations詳細
原文住所:http://blog.csdn.net/rain_butterfly/article/details/38731807
Android最火の高速開発フレームワークandroidannotations構成の詳細
以前ご紹介したxUtilsは国内で比較的人気のある高速開発フレームワークですが、その注釈メカニズムはあまり安定しておらず、注釈の選択肢も少ないので、今日は海外のフレームワークを紹介します.主に注釈の開発に専念し、Androidコードの作成を簡略化します.配置の注意事項が複雑なので、まず配置を詳しく紹介します.
git公式サイト:https://github.com/excilys/androidannotations
ダウンロードした解凍ディレクトリは上記の通り、Android Annotationsはソースエンジニアリング、exampleはサンプルエンジニアリング、
次のようにexamplesHelloWorldEclipseを開きます.
compile-libsフォルダを自分のプロジェクトルートディレクトリにコピーし、libsフォルダを開いてandroidannotations-api-3.0.1をコピーします.jar
自分のプロジェクトのlibsフォルダの下に移動します.次のようになります.
自分のプロジェクトプロジェクト->properties->Java build path->libraries->add jarsを選択androidannotations-api-3.0.1.JAr追加
次のようになります.
Java compilerを開き、enable project specific settingsを選択してcompiler compliance level 1.6以上を設定します.次のようにします.
次に「annotation processing」を選択し、次のようにします.
次にannotation processingを展開factory path->add jarsを選択しcompile-libsの下のandroidannotation-xxxを選択します.jarが追加されます.次のようになります.
androidannotation-xxx.JArはエンジニアリングコンパイルファイル、androidannotations-api-3.0.1.jarはapi呼び出しファイルです.
注意事項:
パッケージを混同する必要がある場合はproguard-project.txt追加:-dontwarn org.springframework.**
===============================
Android最火快速開発フレームワークAndroid Annotations使用詳細
Android最火のクイック開発フレームワークandroidannotationsの構成詳細記事にはeclipseの構成手順があり、Android最火クイック開発フレームワークAndroidAnnotationsの概要記事の簡単な紹介で、本編ではAndroidAnnotationsでの注釈方法の使用について説明します.
@EActivity
例:
@fragment
例:
Android最火の高速開発フレームワークandroidannotations構成の詳細
以前ご紹介したxUtilsは国内で比較的人気のある高速開発フレームワークですが、その注釈メカニズムはあまり安定しておらず、注釈の選択肢も少ないので、今日は海外のフレームワークを紹介します.主に注釈の開発に専念し、Androidコードの作成を簡略化します.配置の注意事項が複雑なので、まず配置を詳しく紹介します.
git公式サイト:https://github.com/excilys/androidannotations
ダウンロードした解凍ディレクトリは上記の通り、Android Annotationsはソースエンジニアリング、exampleはサンプルエンジニアリング、
次のようにexamplesHelloWorldEclipseを開きます.
compile-libsフォルダを自分のプロジェクトルートディレクトリにコピーし、libsフォルダを開いてandroidannotations-api-3.0.1をコピーします.jar
自分のプロジェクトのlibsフォルダの下に移動します.次のようになります.
自分のプロジェクトプロジェクト->properties->Java build path->libraries->add jarsを選択androidannotations-api-3.0.1.JAr追加
次のようになります.
Java compilerを開き、enable project specific settingsを選択してcompiler compliance level 1.6以上を設定します.次のようにします.
次に「annotation processing」を選択し、次のようにします.
次にannotation processingを展開factory path->add jarsを選択しcompile-libsの下のandroidannotation-xxxを選択します.jarが追加されます.次のようになります.
androidannotation-xxx.JArはエンジニアリングコンパイルファイル、androidannotations-api-3.0.1.jarはapi呼び出しファイルです.
注意事項:
パッケージを混同する必要がある場合はproguard-project.txt追加:-dontwarn org.springframework.**
===============================
Android最火快速開発フレームワークAndroid Annotations使用詳細
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 {
}
:このクラスには が1つしかなく、パラメータは 1つの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 {
}
サービスのジャンプ:MyService_.intent(getApplication()).start();
サービスの :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
の2つの で び されます.
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() {
}
の の い は に のプログラムでのイベントバインディングが まれており,Android Annotationsフレームワークで に でき, にコード を し,メンテナンスを にする.
があれば を してくださいhttps://github.com/excilys/androidannotations/wiki/Cookbook,