Rumah >Java >javaTutorial >Bagaimana untuk Mendapatkan ID Sumber Android dengan Cekap daripada Nama Rentetannya?

Bagaimana untuk Mendapatkan ID Sumber Android dengan Cekap daripada Nama Rentetannya?

DDD
DDDasal
2024-12-20 09:31:09639semak imbas

How to Efficiently Get an Android Resource ID from its String Name?

Mendapatkan ID Sumber daripada String dalam Android

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn