Ich setze Text mit setText () wie folgt.
prodNameView.setText("" + name);
prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));
In diesem ersten Fall ist die Verwendung einfach und im zweiten Fall wird Text mit Formatierungstext festgelegt.
Android Studio ist so sehr interessant, ich habe Menü verwendet Analyze -> Code Cleanup
und ich habe Vorschläge über zwei Zeilen wie bekommen.
Verketten Sie den mit setText angezeigten Text nicht. Verwenden Sie eine Ressourcenzeichenfolge mit Platzhaltern. weniger ... (Strg + F1)
Beim Aufrufen von TextView # setText:
- Rufen Sie niemals Number # toString () auf, um Nummern zu formatieren. Bruchtrennzeichen und länderspezifische Ziffern werden nicht richtig behandelt. Verwenden Sie stattdessen das String # -Format mit den richtigen Formatspezifikationen (% d oder% f).
- Übergeben Sie kein Zeichenfolgenliteral (z. B. "Hallo"), um Text anzuzeigen. Hardcodierter Text kann nicht richtig in andere Sprachen übersetzt werden. Verwenden Sie stattdessen Android-Ressourcenzeichenfolgen.
- Erstellen Sie keine Nachrichten, indem Sie Textblöcke verketten. Solche Nachrichten können nicht richtig übersetzt werden.
Was kann ich dafür tun? Jeder kann helfen zu erklären, was die Sache ist und was ich tun soll?
android
concatenation
textview
string-concatenation
Pratik Butani
quelle
quelle
String
in übergebensetText()
. Bsp.:setText(name)
Anstelle vonsetText("" + name)
. Denn wenn Sie Text verketten, wird er nicht so übersetzt, als würden Sie fest codierten Text als Benachrichtigung für die Nachricht verwendenNPE
wenn esname
istNULL
name
ist nichtNULL
vor Verwendung dersetText()
Funktion.<string name="string_product_rate_with_ruppe_sign">Something %1$d</string>
Und in Ihrem Java-Code tun Sie Folgendes :prodOriginalPriceView.setText(getString(R.string.string_product_rate_with_ruppe_sign), price);
(Sie können die Formatierung in der XML-DateiAntworten:
Ressource hat die get überladene Version von getString , die eine nimmt
varargs
vom TypObject
: getString (int, java.lang.Object ...) . Wenn Sie Ihre Zeichenfolge in strings.xml mit den richtigen Platzhaltern korrekt eingerichtet haben, können Sie diese Version verwenden, um die formatierte Version Ihrer endgültigen Zeichenfolge abzurufen. Z.Bmit
getString(R.string.welcome_message, "Test", 0);
android gibt einen String mit zurück
Über
setText("" + name);
Ihr erstes Beispiel
prodNameView.setText("" + name);
ergibt für mich keinen Sinn. Die Textansicht kann Nullwerte verarbeiten. Wenn der Name null ist, wird kein Text gezeichnet.quelle
%1$f
zu Ihrer Zeichenfolge in strings.xml hinzu und rufen Sie dannsetText(getString(R.string.string_product_rate_with_ruppe_sign, new BigDecimal(price).setScale(2, RoundingMode.UP).floatValue() ));
%1$d
. @ reegan29Verwechseln Sie nicht % 1 $ s und % 2 $ d in der akzeptierten Antwort. Hier sind einige zusätzliche Informationen.
Beispiel
Wir werden die folgende formatierte Zeichenfolge erstellen, in die die grauen Teile programmgesteuert eingefügt werden.
Ihr
string resource
:Gehen Sie
string substitution
wie folgt vor:Hinweis:
quelle
Ich bin auf dieselbe Flusenfehlermeldung gestoßen und habe sie auf diese Weise gelöst.
Anfangs war mein Code:
Ich habe den folgenden Fehler erhalten
Also habe ich das hinzugefügt
strings.xml
Welches ist meine Initiale "" + ein Platzhalter für meine Nummer (Menge).
Hinweis : Meine
quantity
Variable wurde zuvor definiert und wollte an die Zeichenfolge angehängt werden. Mein Code als Ergebnis warDanach ging mein Fehler weg. Das Verhalten in der App änderte sich nicht und meine Menge wurde weiterhin so angezeigt, wie ich es jetzt wollte, ohne einen Flusenfehler.
quelle
Sie sollten diesen Thread überprüfen und einen Platzhalter wie seinen verwenden (nicht getestet).
quelle
Verketten Sie keinen Text in Ihrer setText () -Methode. Verketten Sie , was immer Sie wollen, in einen String und fügen Sie diesen String-Wert in Ihre setText () -Methode ein.
Bsp.: richtiger Weg
Verketten Sie nicht innerhalb von setText () wie
quelle
Das Problem ist, dass Sie
""
am Anfang jeder Zeichenfolge anhängen .lint scannt Argumente, die an übergeben werden,
setText
und generiert Warnungen. In Ihrem Fall ist die folgende Warnung relevant:wie Sie jede Zeichenfolge mit verketten
""
.Entfernen Sie diese Verkettung, da die Argumente, die Sie übergeben, bereits Text sind. Sie können auch verwenden,
.toString()
wenn dies irgendwo anders erforderlich ist, anstatt Ihre Zeichenfolge mit zu verketten""
quelle
Wenn Sie i18n nicht unterstützen müssen, können Sie diese Flusenprüfung in Android Studio deaktivieren
Datei -> Einstellungen -> Editor -> Inspektionen -> Android -> Fussel -> TextView-Internationalisierung (deaktivieren Sie diese Option)
quelle
Sie können dies verwenden, es funktioniert für mich
quelle
quelle
Nicht verrückt, es ist zu einfach.
quelle