reparar - regenerar el archivo r.java en android
Utilizando Android getIdentifier() (3)
Aunque la respuesta de Festus Tamakloe es correcta, encontré una peculiaridad en esta función.
Si está declarando una string-array
en un archivo xml, debe acceder a ella llamando a la array
tipo de recurso base, utilizando string-array
resultados de la string-array
de cadenas en el retorno de 0 de anid.
He intentado esto:
r = Resources.getSystem().getIdentifier("ball_red","drawable","com.Juggle2");
Log.i("FindBall","R = "+r);
Y esto:
r = Resources.getSystem().getIdentifier("com.Juggle2:drawable/ball_red", null, null);
Pero ''r'' siempre termina en cero.
Estoy llamando a esta línea desde una clase de ayuda que no es una Actividad y no extiende nada, por lo que no puedo simplemente llamar a getResources()
, pero puedo pasarla desde mi SurfaceView
.
Finalmente, quiero reemplazar "ball_red"
con una variable, pero lo primero es lo primero. Esto no está funcionando.
com.Juggle2
es de hecho mi nombre de paquete. drawable
es la carpeta res
que se encuentra y, de hecho, el nombre del archivo es ball_red
.
R.java dice:
public static final int ball_red=0x7f020027;
Así que no estoy seguro de por qué no está funcionando.
Así que no puedo usar los recursos, debo pasar un contexto y lo hago de esta manera: aquí dentro:
class Collection extends SurfaceView implements SurfaceHolder.Callback {
Estoy creando una nueva instancia de mi clase y le paso getContext()
como parámetro.
Para los usuarios de Xamarin, tuve el problema de haber agregado un icono con letras en minúsculas y mayúsculas (por ejemplo, iconVaccine.png) y se refería al nombre de uppername iconVaccine.
Xamarin le permitirá hacer esto (aunque no debería), pero cuando se compila la aplicación, el nombre se aplana a minúsculas, por lo que debe consultar la variante de minúsculas de la siguiente manera:
Image Name: iconVaccine.png
Xamarin reference: iconVaccine (as created in Resource.designer.cs, but will fail)
Correct Reference: iconvaccine
¡Espero que ayude!
Ya que estás dentro de una actividad es suficiente escribir
int resId = YourActivity.this.getResources().getIdentifier(
"ball_red",
"drawable",
YourActivity.this.getPackageName()
);
o si no lo estás llamando desde una clase interna
int resourceID = getResources().getIdentifier(
"ball_red",
"drawable",
getPackageName()
);
Nota
getIdentifier() Returns 0 if no such resource was found. (0 is not a valid resource ID.)
Comprobar
Compruebe también en su R.java si existe un drawable
con el nombre ball_red
p.ej:
public static final class drawable {
public static final int ball_red = 0x7f020000;
}
EDITAR Si no está en ninguna actividad, debe pasar un context instead of resources as parameter
luego hacer esto
int resId = context.getResources().getIdentifier(
"ball_red",
"drawable",
context.getPackageName()
);