Android TextView:「setTextで表示されるテキストを連結しないでください」質問する

Android TextView:「setTextで表示されるテキストを連結しないでください」質問する

私はテキストを設定していますテキストを設定する()以下の方法で。

prodNameView.setText("" + name);

prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));

その中で初め1つは使い方が簡単で2番1 つは、書式設定テキストを使用してテキストを設定することです。

Android Studioはとても興味深いので、メニューを使用しましたAnalyze -> Code Cleanupそして、上記の 2 行について次のような提案がありました。

ここに画像の説明を入力してください

setText で表示されるテキストを連結しないでください。プレースホルダー付きのリソース文字列を使用してください。less... (Ctrl+F1)

電話するときテキストビュー#setText:

  • 数値をフォーマットするために Number#toString() を呼び出さないでください。分数区切り記号やロケール固有の数字が適切に処理されません。代わりに、適切なフォーマット指定 (%d または %f) を指定した String#format を使用することを検討してください。
  • テキストを表示するために文字列リテラル (例: "Hello") を渡さないでください。ハードコードされたテキストは他の言語に適切に翻訳できません。代わりに Android リソース文字列の使用を検討してください。
  • テキスト チャンクを連結してメッセージを作成しないでください。このようなメッセージは適切に翻訳できません。

これに対して何ができるでしょうか? これが何なのか、そして私は何をすべきなのか説明してくれる人はいますか?

ベストアンサー1

varargsリソースには、型の を受け取る getString のオーバーロード バージョンがありますObjectgetString(int, java.lang.Object...)正しいプレースホルダーを使用して strings.xml で文字列を正しく設定すると、このバージョンを使用して最終的な文字列のフォーマットされたバージョンを取得できます。例:

<string name="welcome_message">Hello, %1$s! You have %2$d new messages.</string>

使用してgetString(R.string.welcome_message, "Test", 0);

Androidは文字列を返します

 "Hello Test! you have 0 new messages"

について setText("" + name);

最初の例はprodNameView.setText("" + name);私には意味がわかりません。TextView は null 値を処理できます。名前が null の場合、テキストは描画されません。

おすすめ記事