Ich habe eine App, die 3 verschiedene Geschmacksrichtungen hat, full
, part1
und part2
.Wie können Menüpunkte für Flavor versteckt oder hinzugefügt werden?
Alle verschiedenen Geschmacksrichtungen haben unterschiedliche Paketnamen, daher kann ich sie als verschiedene Apps versenden.
Jetzt möchte ich, dass nur part1
einen Menüpunkt Reload
ruft. Die anderen 2 Geschmacksrichtungen sollten diesen Menüpunkt nicht enthalten. Ist das möglich?
versuchte ich folgendes mit den Menü Ressourcen:
app
|
+-src
|
+-full
|
+-main
| |
| +-res
| |
| +-menu
| |
| +-main_activity.xml
|
+-part1
| |
| +-res
| |
| +-menu
| |
| +-main_activity.xml
|
+-part2
Wo main_activity.xml
für part1
ist:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_reload"
android:icon="@drawable/ic_reload"
android:title="@string/action_reload"
app:showAsAction="always"/>
</menu>
Und main_activity.xml
für main
ist:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
</menu>
Allerdings, wenn ich baue die ap p in einer anderen Build-Variante als part1
, erhalte ich einen Kompilierungsfehler in meinem MainActivity
wo ich brauche, um die Menüauswahl zu reagieren:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_reload: // Compile error: This item is not available
// TODO reload
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Es ist ziemlich offensichtlich, warum das so ist. Aber haben Sie Vorschläge, wie Sie Menüs für verschiedene Build-Flavors anpassen können?
Sie könnten haben Sie eine BaseActivity mit dem gemeinsamen Code und verschiedenen MainActivity pro Flavor, wo Sie eine andere Version von onOptionsAtemSelected – Blackbelt