Jawaban:
Dengan sesuatu seperti ini:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
untuk mendapatkan ID ImageButton (seperti yang Anda lakukan dengan R.id.name).
name
? Saya ingin menemukan id dari tombol yang referensi saya tahu, dalam kasus saya itubutton1
getResource()
dan getPackageName()
menunjukkan kesalahan. cannot resolve method
getResource()
dan getPackageName()
adalah metode dari Activity.
Anda juga dapat mencoba ini:
try {
Class res = R.drawable.class;
Field field = res.getField("drawableName");
int drawableId = field.getInt(null);
}
catch (Exception e) {
Log.e("MyTag", "Failure to get drawable id.", e);
}
Saya telah menyalin kode sumber ini dari URL di bawah ini. Berdasarkan tes yang dilakukan di halaman ini, ini 5 kali lebih cepat daripada getIdentifier (). Saya juga merasa lebih praktis dan mudah digunakan. Semoga ini membantu Anda juga.
Contoh untuk sumber daya sistem publik:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
Cara lain adalah dengan merujuk dokumentasi untuk kelas android.R.drawable .
Anda dapat menggunakan fungsi ini untuk mendapatkan ID Sumber Daya:
public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
try {
return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
throw new RuntimeException("Error getting Resource ID.", e)
}
}
Jadi jika Anda ingin mendapatkan ID Sumber Daya Yang Dapat Digambar , Anda dapat memanggil metode seperti ini:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(atau dari sebuah fragmen):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Untuk ID Sumber Daya String, Anda dapat menyebutnya seperti ini:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
dll ...
Hati-hati : Ini melempar RuntimeException jika gagal menemukan Resource ID. Pastikan untuk pulih dengan benar dalam produksi.
static
, kalau getResources()
tidak tidak akan berhasil.
Context
itu tidak tersedia. Fix adalah untuk menghapus static
dan memindahkannya ke Context
(misalnya Activity
atau Application
); atau perbaikan alternatif adalah apa yang dilakukan Jonathan dalam editnya, yaitu meneruskan a Context
ke metode.
Satu skenario lain yang saya temui.
String imageName = "Hello" dan kemudian ketika dilewatkan ke fungsi getIdentifier sebagai argumen pertama, itu akan melewati nama dengan string null termination dan akan selalu mengembalikan nol. Lewati imageName.substring ini (0, imageName.length () - 1)