Il y a quelque chose de magique dans un de mes projets de bibliothèque. Alors que les mises en page (res/layout) sont extraites du projet de bibliothèque lui-même, les fichiers du dossier assets sont extraits du projet appelant (pas le projet de bibliothèque).Quels actifs sont utilisés dans le projet Bibliothèque?
Je suis en train de créer une activité d'aide dans un projet de bibliothèque. Le projet appelant donne un nom de fichier à l'activité dans le projet de bibliothèque. Les fichiers sont stockés dans le projet appelant - pas dans le projet de bibliothèque. Lors de l'utilisation de AssetsManager dans le projet de bibliothèque, il utilise les fichiers du projet appelant, et non ceux du dossier assets du projet de bibliothèque.
Est-ce correct?
Voici le dépouillé appelant activité dans le projet racine:
// Calling Project
package aa.bb.aa;
public class MyListActivity extends ListActivity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.mylistactivity); // <--- Stored in resources of the calling project
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.men_help) {
Intent intent = new Intent(this, aa.bb.bb.MyFileBrowser.class);
intent.putExtra(MyConstants.FILE, "mylistactivity.html"); // <-- Stored in assets of the calling project
startActivityForResult(intent, MyConstants.DIALOG_HELP);
return true;
}
return super.onOptionsItemSelected(menuItem);
}
}
Et est ici l'activité dans le projet de bibliothèque. Je pensais que les actifs sont extraites d'ici et non pas de l'activité d'appel/Projet:
// Library project
package aa.bb.bb;
public class MyFileBrowser extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.myfilebrowser); // <-- Stored in resources of the library project
webView = (WebView) findViewById(R.id.browser);
Locale locale = Locale.getDefault();
String localeLanguage = (locale.getLanguage() != null) ? locale.getLanguage() : "en";
Bundle bundleExtras = getIntent().getExtras();
if (bundleExtras != null) {
String file = bundleExtras.getString(MyConstants.FILE);
if (!StringUtils.isEmpty(file)) {
String filename = "help-" + localeLanguage + File.separator + file;
AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open(filename);
} catch (IOException ioException) {
filename = "help-en" + File.separator + file;
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException ioException) {
}
}
webView.loadUrl("file:///android_asset" + File.separator + filename); // <-- Uses file in assets of calling project - not library project
}
}
}
}