Android快速開発フレームワークandroidannotations詳細


原文住所:http://blog.csdn.net/rain_butterfly/article/details/38731807
Android最火の高速開発フレームワークandroidannotations構成の詳細
以前ご紹介したxUtilsは国内で比較的人気のある高速開発フレームワークですが、その注釈メカニズムはあまり安定しておらず、注釈の選択肢も少ないので、今日は海外のフレームワークを紹介します.主に注釈の開発に専念し、Androidコードの作成を簡略化します.配置の注意事項が複雑なので、まず配置を詳しく紹介します.
git公式サイト:https://github.com/excilys/androidannotations
Android 快速开发框架androidannotations详解_第1张图片
ダウンロードした解凍ディレクトリは上記の通り、Android Annotationsはソースエンジニアリング、exampleはサンプルエンジニアリング、
次のようにexamplesHelloWorldEclipseを開きます.
Android 快速开发框架androidannotations详解_第2张图片
compile-libsフォルダを自分のプロジェクトルートディレクトリにコピーし、libsフォルダを開いてandroidannotations-api-3.0.1をコピーします.jar
自分のプロジェクトのlibsフォルダの下に移動します.次のようになります.
Android 快速开发框架androidannotations详解_第3张图片
自分のプロジェクトプロジェクト->properties->Java build path->libraries->add jarsを選択androidannotations-api-3.0.1.JAr追加
次のようになります.

Java compilerを開き、enable project specific settingsを選択してcompiler compliance level 1.6以上を設定します.次のようにします.
Android 快速开发框架androidannotations详解_第4张图片
次に「annotation processing」を選択し、次のようにします.

次にannotation processingを展開factory path->add jarsを選択しcompile-libsの下のandroidannotation-xxxを選択します.jarが追加されます.次のようになります.
Android 快速开发框架androidannotations详解_第5张图片
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,