2012年3月3日土曜日

AndroidAnnotations を使ってみた

AndroidAnnotations』とはjava のアノテーション機能を使ってシンプルでメンテナンス性の高いコードが書けますよと言うものらしいです。

早速導入してみました。

1. jar ダウンロード

https://github.com/excilys/androidannotations/wiki/Download

「Download AndroidAnnotations xxx」をクリックして適当なディレクトリに配置、展開します。
アーカイブファイルの中は
・androidannotations-xxx-api.jar
・androidannotations-xxx.jar
・HOW-TO.txt
・javadoc
・LICENSE.txt
・sources
となっています。


2. プロジェクトの設定

1. プロジェクトを右クリックして Properties を開きます。
2. Java Compiler -> Annotation Processing
    「Enable project specific settings」にチェックをつけます。
3. Java Compiler -> Annotation Processing -> Factory Path
    こちらの「Enable project specific settings」にもチェックをつけます。
    「Add External JARs...」をクリックしてダウンロードした androidannotations-xxx.jar を追加します。
4. Java Build Path -> Libraries
    「Add External JARs...」をクリックして androidannotations-xxx-api.jar を追加します。
5. 設定完了後、プロジェクトをリビルドします。


3. アクティビティに適用

試しにアクティビティに適用してみます。

@EActivity(レイアウトリソースID)
こちらのアノテーションを使うだけで、アクティビティの画面レイアウトファイルを設定できます。

使用前
public class MyActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

使用後
@EActivity(R.layout.main)
public class MyActivity extends Activity {
}

onCreate メソッドのオーバーライド自体が不要になりました。
この差は歴然。

また、適用するアクティビティ名を AndroidManifest.xml で変更してください。
アクティビティ名の末尾にアンダースコアが必要になります。
上記の例でしたら、
<activity android:name=".MyActivity_" />
となります。

これは使いこなせたら便利そうです。
ちょこちょこ使っていこうと思います。

2012年2月28日火曜日

getView が行数より多く呼ばれる

ListAdapter の getView メソッドが、行数より多く呼ばれることがありました。

行数分呼ぶための対処法を先に言うと
ListView の layout_height は match_parent にしなければならない。
と言うことらしいです。
ちなみに、layout_width の方は関係ないようでした。

こちらに記載されています。
http://stackoverflow.com/questions/2618272/custom-listview-adapter-getview-method-being-called-multiple-times-and-in-no-co

気になったのでどのような動きをしているのか getView の呼び元を追ってみました。

<match_parent の場合>
ListAdapter.getView
ListView.obtainView
ListView.makeAndAddView
ListView.fillDown

<wrap_content の場合>
ListAdapter.getView
AbsListView.obtainView
ListView.measureHeightOfChildren
View.onMeasure

む?全然違うメソッドから呼ばれているのですね。
さらに呼び元を追ってみると、全く違うロジックをたどってきているようでした。
この辺りを追求していくと大変そうなので、一旦やめておきます。
match_parent を設定して、行数分呼ばれるようになったので良しとします。

2012年2月11日土曜日

Eclipse インストール時にやること

Eclipseをインストールした時に必ずやっていること
1. エディタの文字コードを UTF-8 に変更
2. Javadoc の author を変更
3. Checkstyle, Find Bugs プラグインをインストール
4. Checkstyle の設定変更


1. エディタの文字コードを UTF-8 に変更


[環境設定] -> [General] -> [Workspace]
Text file encoding を UTF-8 に変更



2. Javadoc の author を変更


デフォルトでは Mac のユーザ名が表示されるようになっています。
会社の PC だと資産番号などになっている場合もあり
その都度書き換えるのは手間です。
なので、設定ファイルに表示名を定義しておきます。

eclipse.ini にユーザ名を設定すればいいのだけれど
eclipse.iniの在処がすぐにわかりませんでした。

それはココに。
eclipseのフォルダ/Eclipse.app/Contents/MacOS/eclipse.ini

このファイルに以下を追加して、Macを再起動。
-Duser.name=表示したい名前



3. Checkstyle, Find Bugs プラグインをインストール

Checkstyle はコーディングルールのチェックに
Find Bugs は静的解析に利用してます。凡ミス防止。

[Help] -> [Install New Software]

・Checkstyle
http://eclipse-cs.sf.net/update/

・Find Bugs
http://findbugs.cs.umd.edu/eclipse/

インストールが完了したらEclipseを再起動。


4. Checkstyle の設定変更

Checkstyle はそのままだと自分のルールに合わないので
設定を少し変更します。

[環境設定] -> [Checkstyle]

Sun Checks がデフォルト設定になっているので
それをコピーして、新しくチェックルールファイルを作ります。

不要なチェック項目
・Missing package-info.java file.
package-info.java にはパッケージ情報を記述できるそうですが
利用しないのでチェックしません。
[Javadoc Comments] -> [Package Javadoc] のチェックを外す

・メソッド xxx は拡張するように設計されていません - abstract か final か空である必要があります。
拡張性の阻害になるのでチェックしません。
[Class Design] -> [Design For Extension] のチェックを外す

・行が 80 文字を超えています。
80文字は短すぎるので、最大文字数を増やすかチェックを外します。
[Size Violations] -> [Maximum Line Length]