AndroidのTextViewに数字を表示したい場合の注意点

こんにちは!ぐちです。

今回は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を渡せば紐づく文字列を参照し、設定してくれる便利なやつなわけです。

計算結果

で、TextViewString型のデータを渡す分には問題ないのですが、数値の計算結果を注意せずに表示したいとなるとハマります。実行時にハマります。笑

下記のように2つの数値を計算し、計算結果を直接setText()の引数に渡すと、案外いい感じで表示してくれそうに見えますが、int型のデータを渡すと、リソースIDと認識してリソースファイルに参照先文字列を探しに行ってしまうのです。

当然、文字列リソースを定義していないので、実行時エラーとなりアプリが異常終了してしまいます。

int sum = 10 + 2;
textView.setText(sum);

で、これをどう回避するかと言いますと、シンプルに文字列に変換すれば想定通りの動作になります。

int sum = 10 + 2;
textView.setText(String.valueOf(sum));

落ち着いて考えれば当然なんですが、ハマりやすいところでもありますのでご紹介しました。

では今回はこの辺で。