如何在android中动态生成原始资源标识符?

oewdyzsn  于 2023-11-15  发布在  Android
关注(0)|答案(3)|浏览(128)

我正在开发一个移动的图书馆应用程序。我在原始文件夹中存储了3-4 db的书籍文件。如果我知道书的名称,那么我首先将此文件复制到/databases/book_name. db,然后根据需要访问它们。我使用

InputStream fileInputStream = getResources().openRawResource(R.raw.book_name);

字符串
获取这些文件
现在,我想传递书名,然后使用字符串book_name动态生成资源标识符 R.raw.book_name。有没有一种方法可以生成这个标识符?

bzzcjhmw

bzzcjhmw1#

使用Resources.getIdentifier()方法:

int resId = getResources().getIdentifier("raw/book_name", null, this.getPackageName());

字符串
如果您的代码不在Activity或应用程序中,则需要首先获取Context。

Context context = getContext(); // or getBaseContext(), or getApplicationContext()
int resId = context.getResources().getIdentifier("raw/book_name", null, context.getPackageName());

ubof19bj

ubof19bj2#

你可以使用我在这里给出的答案:Android: Accessing string.xml using variable name
试试看:

int identifier = getResources().getIdentifier(bookname, "raw", "<application package class>");

字符串
编辑:meh,它的原始。

fd3cxomn

fd3cxomn3#

  • 基于谢尔盖的回答 *

我在CursorAdapter中使用它来干燥代码,最终的工作版本是:

String attribute   = "company_name";
String packageName = view.getContext().getPackageName();

int resourceId = view.getResources().getIdentifier(attribute, null, packageName);

字符串
实际上,这给我带来了问题,所以我切换到下面的,这似乎更稳定:

int resourceId = R.id.class.getField(attribute).getInt(null);

相关问题