Respuestas:
Con algo como esto:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
usaré para obtener la ID de un ImageButton (como lo haría con R.id.name).
name
? Quiero encontrar la identificación de un botón cuya referencia conozco, en mi caso esbutton1
getResource()
y getPackageName()
mostrando error. cannot resolve method
getResource()
y getPackageName()
son métodos de Activity.
También puedes probar esto:
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);
}
He copiado estos códigos fuente de la siguiente URL. Según las pruebas realizadas en esta página, es 5 veces más rápido que getIdentifier (). También me pareció más útil y fácil de usar. Espero que te ayude también.
Ejemplo para un recurso del sistema público:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
Otra forma es referir la documentación para la clase android.R.drawable .
Puede usar esta función para obtener un ID de recurso:
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)
}
}
Entonces, si desea obtener una ID de recurso extraíble , puede llamar al método de esta manera:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(o de un fragmento):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Para un ID de recurso de cadena puede llamarlo así:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
etc ...
Cuidado : arroja una RuntimeException si no puede encontrar la ID del recurso. Asegúrese de recuperarse adecuadamente en la producción.
static
de eso, de lo contrario getResources()
no funcionará.
Context
no estaba disponible. La solución era eliminarlo static
y moverlo a un Context
(por ejemplo, Activity
o Application
); o una solución alternativa es lo que Jonathan hizo en su edición, que es pasar Context
al método.
Otro escenario que encontré.
String imageName = "Hello" y luego, cuando se pasa a la función getIdentifier como primer argumento, pasará el nombre con la terminación de cadena nula y siempre devolverá cero. Pase esta imageName.substring (0, imageName.length () - 1)