AndroidAnnotations-プロジェクトの健全性を損なうことなくコードを簡素化および短縮します(パートI)


Android用のオープンライブラリであるAndroid Annotationsが存在し、数年にわたって改善されています。
機能はRoboJuiceに似ていますが、より注意深く研究すると明らかになります。機能が豊富で、プロジェクトで使用するのにより便利な方法で実装されます。
このライブラリについては、 すでにHabré書いていますが、簡単に、それ自体が更新されました。
さて、AndroidAnnotationsについて詳しく見ていきましょう。これは、特に紳士のAndroid開発キットに含まれているからです。

メリット


1つ目はコードの短縮形です。ビューIDで検索したり、それらのリスナーを個別に定義する必要はなくなりました。
2つ目は、Android開発者の最もエロティックな夢のように、ストリームを実装した作業です。
第三-アクティビティ/フラグメントの状態の便利で簡潔な保存
4番目に、ListViewアダプターの単純な処理。
そして、より多くのグッズ...

中身とその仕組み


うまくいきます! RoboGreendroidOrmliteActionBarFragmentActivityを継承して、プロジェクトに重いライブラリを追加する必要はありません。 注釈はコンパイル中のいずれかの手順で処理され、50kbのjarのみがアセンブルされたプロジェクトに追加され、残りはアセンブルされたapkに収まりません。
アクティビティに注釈を付けた後、コンパイル中にAndroidAnnotationsは継承者を作成し、そこに標準のAndroidメソッドが実装されます。 そして、私たちが書いた残りのコードは、先祖から呼び出されます。 このため、マニフェストで宣言する必要があり、MyActivity_はAndroidAnnotationsによって自動的に継承されるMyActivityクラスです。
怖いように聞こえますが、実際には、このアプローチのおかげで、開発者としての私たちは勝つだけです。
パフォーマンスは低下しません-標準的な方法が使用されます。 そして、書くことの利便性は何倍にもなります。
もう1つの重要な機能:プロジェクト全体を書き換える必要はありません-アクティビティ/フラグメント/ビューに注釈を付け、内部で必要な注釈のみを使用します。 そして残りは、以前に行ったように、公式文書が示しているように、書くことです。 たとえば、プロジェクトではフローの注釈のみが必要です。それらの注釈とActivity / Fragment注釈を追加し、残りを標準的な方法で記述します。

プロジェクトの実施


以下、バージョン2.6についてすべて説明します。 将来のバージョンでの変更については、変更ログをご覧ください

プロジェクト設定



最も退屈な作業が終了すると、歌が始まります。

簡単なアクティビティ

まず、MainActivityに注釈を付けます-マニフェストで:
<activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 

.MainActivityを.MainActivity_に置き換えます
クラスに注釈を付けます。
 @EActivity(R.layout.main_activity) public class MainActivity extends Activity { 

これで、onCreateオーバーロードを安全に削除してコンパイルを試みることができます。

後続のアクティビティを起動する

通常のアクティビティでは、インターフェイス要素を初期化するメソッドは常に実行され、その実行後にのみ、さまざまなビューにアクセスするメソッドを呼び出すことができます。 注釈付きアクティビティの場合、 @AfterViewsようなインターフェイス要素にアクセスするメソッドに注釈を付けます
次に、次の注釈付きアクティビティを実行して、さまざまな実験を実行します。
  @AfterViews protected void afterViews(){ TestActivity_.intent(this).start(); } 

このような簡単な方法で、注釈付きのアクティビティが起動されます。
エキストラの転送を開始するには: TestActivity_.intent(context).myDateExtra(someDate).start();
ここで、myDateExtraはTestActivityの注釈付き@ Extraシリアル化可能な保護フィールドです
フラグを使用して実行するには: TestActivity_.intent(context).flags(FLAG_ACTIVITY_CLEAR_TOP).start();

アクティビティに最大限の注釈を付けます

検索ビュー:
  @ViewById protected EditText testactivity_first_edittext; @ViewById(R.id.testactivity_second_textview) protected TextView secondTextView; 

状態を保存するには、保存されたインスタンス状態オブジェクトを手動で削除する必要はありません。それで十分です:
  @InstanceState String stateToSave; 

また、画面が回転するなど、状態が変化すると、このフィールドは再作成されませんが、その値は保持されます。

文字列などのリソースの取得:
  @StringRes(R.string.hello_world) String myHelloString; 

ハングonClickListener:
  @Click(R.id.testactivity_first_button) void myButtonWasClicked() { secondTextView.setText("first button was clicked"); } 

テキストの変更を聞く:
  @TextChange(R.id.testactivity_second_edittext) void onTextChangesOnSomeTextViews(TextView tv, CharSequence text) { Toast.makeText(this, "second textview was changed", Toast.LENGTH_SHORT).show(); } 


ストリームで最も快適な作業

基本的に、このライブラリをプロジェクトで使用して、ストリームを操作します。
これには2つの注釈が使用されます。
@ Background -メソッドがバックグラウンドで実行されるように注釈が付けられます
@ UiThreadこれは、バックグラウンドスレッドで呼び出されるが、 UIスレッドで実行されるメソッドに注釈を付ける必要があります
コードの例を次に示します。
  @Click(R.id.testactivity_second_button) protected void secondButtonWasClicked() { backgroundWork(); } @Background protected void backgroundWork() { publishProgress(0); publishProgress(10); publishProgress(100); onBGTaskFinish("bg task finished"); } @UiThread void publishProgress(int progress) { testactivity_first_edittext.setText("Background task progress: "+ progress); } @UiThread void onBGTaskFinish(String resultText){ secondTextView.setText(resultText); } 

ボタンをクリックすると、バックグラウンドスレッドが起動され、実行中に進捗状況が公開され、最終的に実行結果が転送されます。

続きは今日までです...

図書館
すべてのライブラリアノテーションの説明
新しいプロジェクトでのライブラリの迅速な実装
記事のサンプルプロジェクト

Source: https://habr.com/ru/post/J154851/


All Articles