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]