Apabila menghantar ID sumber kepada kaedah, selalunya wajar untuk mengakses kedua-dua ID dan rentetan yang sepadan. Sebagai contoh, pertimbangkan sumber "ikon":
R.drawable.icon
Untuk mendapatkan kedua-dua ID dan rentetan "ikon", beberapa pendekatan boleh diterokai:
Satu penyelesaian melibatkan penggunaan Sumber. kaedah getIdentifier():
int resID = getResources().getIdentifier("icon", "drawable", getPackageName()); String iconString = "icon";
Walau bagaimanapun, penyelidikan baru-baru ini telah menunjukkan bahawa Resources.getIdentifier() boleh kurang cekap daripada menggunakan pantulan.
Sebagai alternatif, anda boleh menggunakan kod berasaskan pantulan berikut:
public static int getResId(String resName, Class<?> c) { try { Field idField = c.getDeclaredField(resName); return idField.getInt(idField); } catch (Exception e) { e.printStackTrace(); return -1; } }
Untuk menggunakan kaedah ini untuk sumber "ikon":
int resID = getResId("icon", R.drawable.class); // or other resource class String iconString = "icon";
Walaupun pendekatan refleksi ini mungkin lebih cekap, adalah penting untuk mengambil perhatian potensi kelemahan. Dalam binaan keluaran dengan pengecutan kod/sumber didayakan, penyelesaian ini mungkin gagal. Selain itu, ia mungkin tidak berfungsi dalam kes di mana nama rentetan berbeza daripada format nama sumber yang dijangkakan.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan ID Sumber Android dengan Cekap daripada Nama Rentetannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!