Saya mengatur teks menggunakan setText () dengan cara berikut.
prodNameView.setText("" + name);
prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));
Dalam yang pertama adalah penggunaan sederhana dan yang kedua adalah pengaturan teks dengan format teks.
Android Studio sangat menarik, saya menggunakan Menu Analyze -> Code Cleanup
dan saya mendapat saran di atas dua baris seperti.
Jangan menyatukan teks yang ditampilkan dengan setText. Gunakan string sumber daya dengan placeholder. kurang ... (Ctrl + F1)
Saat memanggil TextView # setText:
- Jangan pernah panggil Nomor # toString () untuk memformat angka; itu tidak akan menangani pemisah fraksi dan angka spesifik lokal dengan benar. Pertimbangkan untuk menggunakan format String # dengan spesifikasi format yang tepat (% d atau% f).
- Jangan melewatkan string literal (mis. "Hello") untuk menampilkan teks. Teks yang dikode keras tidak dapat diterjemahkan dengan benar ke bahasa lain. Pertimbangkan menggunakan string sumber daya Android sebagai gantinya.
- Jangan membuat pesan dengan menggabungkan potongan teks. Pesan semacam itu tidak dapat diterjemahkan dengan benar.
Apa yang bisa saya lakukan untuk ini? Adakah yang bisa membantu menjelaskan benda apa itu dan apa yang harus saya lakukan?
android
concatenation
textview
string-concatenation
Pratik Butani
sumber
sumber
String
menjadisetText()
. Contoh:setText(name)
sebagai penggantisetText("" + name)
. Karena jika Anda menggabungkan teks, itu tidak akan diterjemahkan seperti Anda menggunakan teks Hardcoded sebagai pesan memberitahukanNPE
jikaname
adalahNULL
name
tidakNULL
sebelum menggunakansetText()
fungsi.<string name="string_product_rate_with_ruppe_sign">Something %1$d</string>
Dan dalam kode java Anda, Anda melakukan sesuatu seperti ini:prodOriginalPriceView.setText(getString(R.string.string_product_rate_with_ruppe_sign), price);
(Anda dapat melakukan format pada file xml: [ developer.android.com/guide/topics/resources/…Jawaban:
Resource memiliki versi getString yang kelebihan beban yang menggunakan
varargs
tipeObject
: getString (int, java.lang.Object ...) . Jika Anda menyiapkan string dengan benar di strings.xml, dengan penampung yang benar, Anda dapat menggunakan versi ini untuk mengambil versi terformat dari String akhir Anda. Misalnyamenggunakan
getString(R.string.welcome_message, "Test", 0);
Android akan mengembalikan sebuah String dengan
Tentang
setText("" + name);
Contoh pertama Anda,
prodNameView.setText("" + name);
tidak masuk akal bagi saya. TextView mampu menangani nilai null. Jika nama adalah nol, tidak ada teks yang akan ditarik.sumber
%1$f
ke string Anda, di strings.xml dan kemudian panggilsetText(getString(R.string.string_product_rate_with_ruppe_sign, new BigDecimal(price).setScale(2, RoundingMode.UP).floatValue() ));
%1$d
. @ reegan29Jangan bingung dengan % 1 $ s dan % 2 $ d dalam jawaban yang diterima. Berikut adalah beberapa informasi tambahan.
Contoh
Kami akan membuat string berformat berikut di mana bagian abu-abu dimasukkan secara terprogram.
Anda
string resource
:Lakukan
string substitution
seperti yang diberikan di bawah ini:catatan:
sumber
Saya mengalami pesan kesalahan serat yang sama dan menyelesaikannya dengan cara ini.
Awalnya kode saya adalah:
Saya mendapat kesalahan berikut
Jadi, saya menambahkan ini ke
strings.xml
Yang merupakan "" awal + tempat saya untuk nomor saya (kuantitas).
Catatan :
quantity
Variabel saya sebelumnya didefinisikan dan saya ingin menambahkan string. Kode saya sebagai hasilnyaSetelah ini, kesalahan saya hilang. Perilaku dalam aplikasi tidak berubah dan kuantitas saya terus ditampilkan seperti yang saya inginkan sekarang tanpa kesalahan serat.
sumber
Anda harus memeriksa utas ini dan menggunakan penampung seperti miliknya (tidak diuji)
sumber
Jangan menyatukan teks di dalam metode setText () Anda , gabungkan apa yang Anda inginkan dalam sebuah String dan masukkan nilai String itu ke dalam metode setText () Anda .
mis: cara yang benar
Jangan menyatukan di dalam setText () seperti
sumber
masalahnya adalah karena Anda menambahkan
""
pada awal setiap string.lint akan memindai argumen yang diteruskan ke
setText
dan akan menghasilkan peringatan, dalam kasus Anda peringatan berikut relevan:karena Anda menggabungkan setiap string dengan
""
.hapus gabungan ini karena argumen yang Anda berikan sudah berupa teks. Juga, Anda dapat menggunakan
.toString()
jika diperlukan di tempat lain alih-alih menyatukan string Anda""
sumber
Jika Anda tidak perlu mendukung i18n, Anda dapat menonaktifkan pemeriksaan serat ini di Android Studio
File -> Pengaturan -> Editor -> Inspeksi -> Android -> Lint -> TextView Internasionalisasi (hapus centang ini)
sumber
Anda dapat menggunakan ini, ini berfungsi untuk saya
sumber
sumber
Jangan Gila, Terlalu Sederhana.
sumber