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.
Context
mevcut değildi. Düzeltme, static
onu kaldırıp a Context
(örneğin Activity
veya 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