Yanıtlar:
Bunun gibi bir şeyle:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());Bir ImageButton kimliğini elde etmek için kullanacağım (R.id.name ile yapacağınız gibi).
name? Referansını bildiğim bir düğmenin kimliğini bulmak istiyorum, benim durumumdabutton1
getResource()ve getPackageName()hata gösteren. cannot resolve method
getResource()ve getPackageName()Activity'den yöntemler.
Ayrıca şunu da deneyebilirsiniz:
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);
}
Bu kaynak kodları aşağıdaki URL'den kopyaladım. Bu sayfada yapılan testlere göre getIdentifier () 'dan 5 kat daha hızlıdır. Ayrıca daha kullanışlı ve kullanımı kolay buldum. Umarım sana da yardımcı olur.
Bir genel sistem kaynağı örneği:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");

Başka bir yol da android.R.drawable sınıfının belgelerine başvurmaktır .
Bir Kaynak Kimliği almak için bu işlevi kullanabilirsiniz:
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)
}
}
Dolayısıyla, Çekilebilir Kaynak Kimliği almak istiyorsanız , yöntemi şu şekilde çağırabilirsiniz:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(veya bir parçadan):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Bir Dize Kaynak Kimliği için bunu şu şekilde çağırabilirsiniz:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
vb...
Dikkatli : Kaynak Kimliğini bulamazsa bir RuntimeException oluşturur. Üretim sırasında uygun şekilde toparlandığınızdan emin olun.
static, aksi takdirde getResources()işe yaramayacak.
Contextmevcut değildi. Düzeltme, staticonu kaldırıp a Context(örneğin Activityveya Application); ya da alternatif düzeltme, Jonathan'ın düzenlemesinde yaptığı Context, yönteme bir geçiş yapmaktır.
Karşılaştığım bir başka senaryo.
String imageName = "Merhaba" ve sonra getIdentifier işlevine ilk argüman olarak iletildiğinde, adı dize null sonlandırma ile geçirecek ve her zaman sıfır döndürecektir. Bu imageName.substring (0, imageName.length () - 1) geçin