Saya perlu memberikan ID sumber daya ke metode di salah satu kelas saya. Perlu menggunakan id yang ditunjuk oleh referensi dan juga membutuhkan string. Bagaimana cara terbaik saya mencapai ini?
Sebagai contoh:
R.drawable.icon
Saya perlu mendapatkan ID integer ini, tetapi saya juga perlu akses ke string "ikon".
Akan lebih baik jika semua yang saya harus sampaikan ke metode adalah string "ikon".
Jawaban:
@EboMike: Saya tidak tahu itu
Resources.getIdentifier()
ada.Dalam proyek saya, saya menggunakan kode berikut untuk melakukan itu:
Ini akan digunakan seperti ini untuk mendapatkan nilai dari
R.drawable.icon
nilai integer sumber dayaSaya baru saja menemukan posting blog yang mengatakan bahwa
Resources.getIdentifier()
lebih lambat daripada menggunakan refleksi seperti yang saya lakukan. Lihat itu .sumber
getIdentifier()
harus melakukan dua pencarian refleksi. Dalam contoh Anda di atas,getIdentifier()
akan menggunakan refleksi untuk mendapatkanDrawable.class
, lalu pencarian refleksi lain untuk mendapatkan ID sumber daya. Itu akan menjelaskan perbedaan kecepatan. Yang sedang berkata, tidak ada yang terutama cepat dan karena itu benar-benar perlu di-cache (terutama jika digunakan dalam satu lingkaran, atau untuk baris dalam aListView
). Dan masalah besar pendekatan refleksi adalah bahwa ia membuat asumsi tentang internal Android yang mungkin berubah dalam beberapa rilis mendatang.context
parameternya?Anda dapat menggunakan fungsi ini untuk mendapatkan ID sumber daya.
Jadi jika Anda ingin mendapatkan fungsi panggilan drawable seperti ini
dan untuk string Anda bisa menyebutnya seperti ini
Baca ini
sumber
Ini didasarkan pada jawaban @Macarse.
Gunakan ini untuk mendapatkan ID sumber daya dengan cara yang lebih cepat dan ramah kode.
Contoh:
sumber
Cara mendapatkan id sumber daya aplikasi dari nama sumber daya adalah pertanyaan yang cukup umum dan dijawab dengan baik.
Cara mendapatkan ID sumber daya Android asli dari nama sumber daya kurang dijawab dengan baik. Inilah solusi saya untuk mendapatkan sumber daya yang dapat ditarik Android berdasarkan nama sumber daya:
Metode ini dapat dimodifikasi untuk mengakses jenis sumber daya lainnya.
sumber
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ return mContext.getDrawable(resourceId); } else { return mContext.getResources().getDrawable(resourceId); }
Jika Anda perlu memasangkan string dan int, lalu bagaimana dengan Peta?
sumber
Anda dapat menggunakan
Resources.getIdentifier()
, meskipun Anda perlu menggunakan format untuk string Anda saat Anda menggunakannya dalam file XML Anda, yaitupackage:drawable/icon
.sumber
getResourceEntryName(id)
untuk menemukan nama string. Tidak perlu mencari "ikon" dari teks yang lebih panjang.Saya memang suka ini, ini bekerja untuk saya:
sumber
sumber
sumber
getIdentifier
harusid
. Ini bahkan tidak disebutkan di situs dev android. dari mana Anda mendapatkan informasi itu?Karena Anda mengatakan Anda hanya ingin melewatkan satu parameter dan sepertinya tidak masalah, Anda bisa meneruskan pengidentifikasi sumber daya dan kemudian mencari nama string untuknya, dengan demikian:
Ini mungkin cara paling efisien untuk mendapatkan kedua nilai tersebut. Anda tidak perlu dipusingkan untuk menemukan hanya bagian "ikon" dari string yang lebih panjang.
sumber
Di res / tata letak / my_image_layout.xml Anda
Untuk mengambil ImageView itu dengan nilai id +,, di dalam kode java Anda, lakukan ini:
sumber
Pendekatan Kotlin
Pemakaian:
sumber
Di MonoDroid / Xamarin.Android dapat Anda lakukan:
Tetapi karena GetIdentifier tidak direkomendasikan di Android - Anda dapat menggunakan Reflection seperti ini:
di mana saya menyarankan untuk mencoba / menangkap atau memverifikasi string yang Anda lewati.
sumber
Untuk mendapatkan id yang dapat ditarik dari nama sumber daya String saya menggunakan kode ini:
sumber