こんにちは!ぐちです。
今回はAndroidアプリを作る際にハマりがちな注意点についてご紹介したいと思います。
TextView
Androidでは画面に文字列を表示する際によくTextView
という部品?を使います。で、それと同時に静的な文字列をリソースとして持つ場合はXMLファイルに定義し、それをソースコード内で参照して使います。
レイアウトリソースで定義したTextView
をソースコードから使えるようにするには下記のようにコードを書きます。
TextView textView = (TextView)findViewById(R.id.textview);
このtextView
にリソースファイルの文字列を表示させたい場合は次のようにします。
textView.setText(R.string.title);
このsetText()
がやっかいと言いますか、ハマりどころでして。引数の型がCharSequence
という型でして汎用性をもたせるために、String
型ではないようです。
で、R
クラスの参照はリソースIDを持っているので、int
型なんです。リソースIDを渡せば紐づく文字列を参照し、設定してくれる便利なやつなわけです。
計算結果
で、TextView
にString
型のデータを渡す分には問題ないのですが、数値の計算結果を注意せずに表示したいとなるとハマります。実行時にハマります。笑
下記のように2つの数値を計算し、計算結果を直接setText()
の引数に渡すと、案外いい感じで表示してくれそうに見えますが、int
型のデータを渡すと、リソースIDと認識してリソースファイルに参照先文字列を探しに行ってしまうのです。
当然、文字列リソースを定義していないので、実行時エラーとなりアプリが異常終了してしまいます。
int sum = 10 + 2; textView.setText(sum);
で、これをどう回避するかと言いますと、シンプルに文字列に変換すれば想定通りの動作になります。
int sum = 10 + 2; textView.setText(String.valueOf(sum));
落ち着いて考えれば当然なんですが、ハマりやすいところでもありますのでご紹介しました。
では今回はこの辺で。