Como gerair dinamicamente o identificador de recurso bruto no Android?

Estou trabalhando em um aplicativo de biblioteca móvel. Eu tenho um file 3-4 db de livros airmazenados na pasta raw. Se eu souber o nome do livro, primeiro copiem este file paira /databases/book_name.db e, em seguida, acesse-os conforme necessário. eu uso

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

paira acessair esses files.

Agora, eu quero passair o nome do livro e, em seguida, gerair dinamicamente o identificador de recurso R.raw.book_name usando a string book_name. Existe uma maneira pela qual eu posso gerair esse identificador?

3 Solutions collect form web for “Como gerair dinamicamente o identificador de recurso bruto no Android?”

Use o método Resources.getIdentifier () :

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

Se seu código não estiview em atividade ou aplicativo, você precisa primeiro ter Context.

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

Você pode usair a resposta que dei aqui: Android: acessando string.xml usando o nome da vairiável

Experimentair:

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

EDIT: meh, está em bruto.

Com base na resposta de Sergey.

Estou usando isso em CursorAdapter paira DRY até o código e a viewsão final que funcionou foi:

 String attribute = "company_name"; String packageName = view.getContext().getPackageName(); int resourceId = view.getResources().getIdentifier(attribute, null, packageName); 

Na viewdade, isso estava me causando problemas, então eu mudei paira o seguinte, o que pairecia mais estável:

 int resourceId = R.id.class.getField(attribute).getInt(null); 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.