Pregunta Compare los nombres de cada recurso con el contenido de una variable de la base de datos sqlite


Espero que me puedas ayudar, ya he investigado mi caso pero no encontré una buena respuesta. Quiero comparar el contenido de una variable con los nombres de todos los recursos existentes (si es posible solo con recursos dibujables).

La pregunta en breve: ¿Cómo comparar el contenido de String de una variable con una lista de todos los nombres de recursos, preferencialmente solo con recursos dibujables? O, en otras palabras: ¿Cómo obtener una lista (que contenga cadenas) de todos los nombres de recursos, recursos preferibles solo dibujables?

El caso: Quiero mostrar un símbolo basado en un tipo dado. Este tipo se recupera de una base de datos SQLite. Hay muchos símbolos almacenados como un recurso dibujable, todos se nombran como uno de los tipos posibles. Para cada tipo almacenado en la base de datos, quiero mostrar el símbolo de ajuste en una lista. La igualdad se debe encontrar a través de una comparación (a través del método que contiene) entre la variable "tipo" y una lista que contiene los nombres de todos los recursos (dibujables).

Ejemplo: En la base de datos hay tipos llamados "A", "B" y "C". En la carpeta de recursos dibujables hay gráficos con el nombre "A", "BX" y "S". La comparación debe llevar al caso, de que en la lista solo el tipo "A" está conectado con el símbolo dibujable apropiado "A". Los tipos "B" y "C" no tienen recursos dibujables con nombre y, por lo tanto, no deberían mostrar ningún símbolo.

Espero que haya entendido mi pregunta y gracias de antemano por su ayuda.


5
2017-12-11 12:40


origen


Respuestas:


O en otras palabras: cómo obtener una lista (que contiene cadenas) de todos   ¿Nombres de recursos, recursos preferibles solo dibujables?

Esto es probablemente lo que quieres:

Field[] fields = R.drawable.class.getFields();
String[] allDrawablesNames = new String[fields.length];
for (int  i =0; i < fields.length; i++) {           
    allDrawablesNames[i] = fields[i].getName();
}

14
2017-12-11 13:20



Lo siento, sé que buscabas una solución Java, pero no encontré ninguna solución para el problema de C # y Xamarin en StackOverflow, por lo que dejaré mi solución para Android aquí si no te importa.

Encontré una clase bien escrita ReflectionUtils en GitHub, solo lo usé e hice este método para llamar.

    private List<string> GetAllStrings()
    {
        IEnumerable<FieldInfo> fields = ReflectionUtils.GetAllFields(typeof(Resource.String));
        List<string> list = new List<string>();
        using (var enumerator = fields.GetEnumerator())
        {
            try
            {
                while (enumerator.MoveNext())
                {
                    list.Add(enumerator.Current.Name);
                }
            } catch (Exception e)
            {
                // Handle exception.
            }
        }
        return list;
    }

1
2018-02-19 11:15