比较每个资源的名称与SQLite数据库的一个变量的内容(Compare names of every

2019-07-04 22:48发布

我希望你能帮助我,我已经研究过我的情况,但没有找到一个很好的答案。 我想与所有现有资源的名称的变量的内容(如果可能的话只能用绘图资源)进行比较。

总之这样的问题:如何将变量的字符串内容与所有资源名称的列表进行比较,只能用绘图资源优先? 或者换句话说:如何获取列表(包含字符串)的所有资源名称,优惠只绘制资源?

案例:我想显示基于给定类型的符号。 这种类型的从SQLite数据库检索。 有存储为绘制资源很多符号,它们都被命名为喜欢在可能的类型。 对于数据库中的每个存储类型我想在列表中显示拟合符号。 平等应当找出通过比较变量“类型”和包含所有(绘制)资源的名称的列表之间(通过包含法)。

例如:在数据库中命名为“A”,“B”和“C”的类型。 在绘图资源文件夹是图形名称为“A”,“BX”和“S”。 比较应导致的情况下,在列表仅输入“A”与嵌合绘制符号“A”相连。 类型“B”和“C”有没有可能命名绘图资源,因此应该不会显示任何符号。

我希望你明白我的问题,谢谢你在先进的帮助。

Answer 1:

或者换句话说:如何获取列表(包含字符串)的所有资源名称,优惠只绘制资源?

这可能是你想要什么:

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();
}


Answer 2:

对不起,我知道你正在寻找一个Java解决方案,但我没有找到在StackOverflow上的C#和Xamarin问题的任何解决方案,所以我会离开我的解决方案为Android在这里,如果你不介意的话。

我发现了一个良好的书面类ReflectionUtils在GitHub上,只是用它和使这个方法来调用。

    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;
    }


文章来源: Compare names of every resource with the content of a variable of sqlite database