2012/11/20

R.id.xxx を switch 文で使うと case expressions must be constant expressions

これまで1プロジェクトで作成していた Androidアプリを機能別にライブラリ化してみました。
すると、 case expressions must be constant expressions というエラーが。


Migrate Android Code をクリックしてみると、以下のような文が表示されました。

ざっと意訳すると、以下のような感じでしょうか。

ADT 14 以降のライブラリプロジェクトでは R.id.menu_settings のようなリソースフィールドが定数ではなくなります。これは、再コンパイル無しでライブラリを使用できるようにするためです。

この変更により、(リソース)フィールドを switch 文の中で直接使うことが出来なくなります。代わりに、if-else を使用するようにしてください。

Eclipse では switch を自動的に if-else に変更することが出来ます。switch 文の上にカーソルを置き、Quick Fix を呼び出してください (Windows, Linux の場合は Ctrl-1, Mac の場合は Cmd-1)。
そして、 Convert switch to if-else を選択します。

リンク先の http://tools.android.com/tips/non-constant-fields を見てみると、ほぼ同じことが図入りで説明されています。


というわけで、「ライブラリプロジェクトにおいて、リソースフィールドを条件分岐に使用する場合は、switch ではなく if-else を使うように」ってことだそうです。

ちなみに、「ライブラリプロジェクト」とは
Project → Properties → Android で Is Library にチェックを入れたプロジェクトのことです。


0 件のコメント: