Autore Topic: Menu in più activity  (Letto 1408 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Menu in più activity
« il: 06 Marzo 2012, 12:40:55 CET »
0
Ciao a tutti. Ho un optionMenu che viene visualizzato in più activity quindi vorrei sapere se è possibile creare un unico file java nel quale mettere i metodi onCreateOptionMenu ed onOptionItemSelected per poi farlo leggere dalle activity, questo mi farebbe risparmiare codice e mi consentirebbe, qualora cambiasse il menu, di modificare un solo file. Ma come cavolo si fa ?

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Menu in più activity
« Risposta #1 il: 06 Marzo 2012, 14:39:24 CET »
0
Devi definire il menu nell'XML.

I metodi di callback che hai elencato vanno sempre definiti!
Ora ti cerco un esempio

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Menu in più activity
« Risposta #2 il: 06 Marzo 2012, 14:43:26 CET »
+1
Spero di aver copiato tutto correttamente, è molto semplice come puoi vedere. Spero vado :P

res/menu/menu_home.xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
       android:id="@id/menu_home_history"
       android:orderInCategory="0"
       android:icon="@drawable/ic_menu_history"
       android:title="History"/>
    <item
       android:id="@id/menu_home_settings"
       android:orderInCategory="1"
       android:icon="@drawable/ic_menu_settings"
       android:title="Settings"/>
</menu>

Activity.java

Codice (Java): [Seleziona]
@Override
        public boolean onCreateOptionsMenu(Menu menu) {
                super.onCreateOptionsMenu(menu);       
                getSupportMenuInflater().inflate(R.menu.menu_home, menu);
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
               

                case R.id.menu_home_history:
                        intent = new Intent(ZTracksActivity.this, HistoryActivity.class);
                        startActivity(intent);
                        break;

                case R.id.menu_home_settings:
                        intent = new Intent(ZTracksActivity.this, SettingsActivity.class);
                        startActivity(intent);
                        break;

                }
                return super.onOptionsItemSelected(item);
        }

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Menu in più activity
« Risposta #3 il: 06 Marzo 2012, 15:00:50 CET »
+3
Se il tuo obbiettivo è avere lo stesso menù in diverse activities, ti consiglio di creare un Activity di base che estende l'Activity standard.  Qui dentro implementi le i metodi onCreateOptionsMenu e onOptionsItemSelected con il tuo codice. A questo punto tutte le altre activities dovranno estendere questa tua Activity di base. Con un esempio è sicuramente più semplice, io scriverei una cosa del genere riutilizzando il codice di xWOLKx:

Codice (Java): [Seleziona]
public abstract class AbstractActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);
               
        }

        public boolean onCreateOptionsMenu(Menu menu) {
                super.onCreateOptionsMenu(menu);      
                getSupportMenuInflater().inflate(R.menu.menu_home, menu);
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
               

                case R.id.menu_home_history:
                        intent = new Intent(ZTracksActivity.this, HistoryActivity.class);
                        startActivity(intent);
                        break;

                case R.id.menu_home_settings:
                        intent = new Intent(ZTracksActivity.this, SettingsActivity.class);
                        startActivity(intent);
                        break;

                }
                return super.onOptionsItemSelected(item);
        }
}

Ora tutte le tue altre Activities che devono avere lo stesso menu possono estendere l'AbstractActivity, tipo:

Codice (Java): [Seleziona]
public abstract class FirstActivity extends AbstractActivity {
}

public abstract class SecondActivity extends AbstractActivity {
}
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Menu in più activity
« Risposta #4 il: 06 Marzo 2012, 16:44:46 CET »
0
Grazie demper era proprio quello che intendevo !!! scusa l'ignoranza ma perchè public abstract ??

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Menu in più activity
« Risposta #5 il: 06 Marzo 2012, 17:02:08 CET »
0
La keyword abstract è usata per definire una classe astratta. La definizione di classe astratta è la seguente:

Citazione
Una classe astratta è una classe che non può essere istanziata direttamente. Da una siffatta classe sarà possibile soltanto ereditarne proprietà e metodi nelle classi figlie.

Sempre grazie alla parola riservata abstract, è' possibile definire anche dei metodi astratti all'interno delle classi astratte. Tali metodi, dovranno essere necessariamente ridefiniti (tramite override) nelle classi figlie.

Utilizzando la logica di programmazione che ti ho proposto fai presto anche ad aggiungere a qualcuna delle tue Activities dei menù aggiuntivi. Supponi che tutte abbiano il menù standard, ma una delle activities necessiti anche di un ulteriore menù specifico. Basterà in questa activity fare l'override dei due metodi onCreateOptionsMenu e onOptionsItemSelected aggiungendo il nuovo menu:


Codice (Java): [Seleziona]
public abstract class FirstActivity extends AbstractActivity {
     @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                super.onCreateOptionsMenu(menu);
                menu.add(0, NEW_MENU_ID, 0, R.string.new_menu_title).setIcon(android.R.drawable.btn_star_big_on);
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case NEW_MENU_ID: {
                        // Your action code
                        break;
                }

                }
                return super.onOptionsItemSelected(item);
        }
}
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Menu in più activity
« Risposta #6 il: 06 Marzo 2012, 17:08:55 CET »
0
Ottimo!!! ti meriti uno special Thanks ;)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Menu in più activity
« Risposta #7 il: 06 Marzo 2012, 17:28:34 CET »
0
Una cosa, se ho una activity che estende ListActivity ed ho necessità di estendere anche la classe dei menu come faccio ?

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
R: Re:Menu in più activity
« Risposta #8 il: 06 Marzo 2012, 17:44:42 CET »
0
Una cosa, se ho una activity che estende ListActivity ed ho necessità di estendere anche la classe dei menu come faccio ?
Una classe che estende ListView non è un'activity.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Menu in più activity
« Risposta #9 il: 06 Marzo 2012, 17:49:56 CET »
0
Come no? è un classe che estende ListActivity non ListView

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Menu in più activity
« Risposta #10 il: 06 Marzo 2012, 18:43:48 CET »
0
Come no? è un classe che estende ListActivity non ListView
Scusami, avevo letto male. In quel caso ti basta trasformare la ListActivity in Activity semplice in cui andrai a impostare un layout che contiene la ListView che poi ti gestirai manualmente.
Cioé al posto di usare ad esempio getListView().setAdapter(blablabla) farai al modo classico:
Codice (Java): [Seleziona]
ListView l = (ListView) findViewById(R.id.listablabla);
l.setAdapter(blabla);
Postate il LogCat LogCat LogCat LogCat LogCat

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Menu in più activity
« Risposta #11 il: 06 Marzo 2012, 21:05:10 CET »
0
Scusami, avevo letto male. In quel caso ti basta trasformare la ListActivity in Activity semplice in cui andrai a impostare un layout che contiene la ListView che poi ti gestirai manualmente.
Cioé al posto di usare ad esempio getListView().setAdapter(blablabla) farai al modo classico:
Codice (Java): [Seleziona]
ListView l = (ListView) findViewById(R.id.listablabla);
l.setAdapter(blabla);

Ah ok pensavo ci fosse un altro modo. Grazie ;-)

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Menu in più activity
« Risposta #12 il: 07 Marzo 2012, 00:15:22 CET »
0
Ah ok pensavo ci fosse un altro modo. Grazie ;-)
a meno che non ti fai un'altra classe astratta che estende ListActivity....
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Menu in più activity
« Risposta #13 il: 07 Marzo 2012, 07:39:20 CET »
0
Tu praticamente dici di fare una cosa del tipo ''public abstract class ListAbstract extends ListActivity'' e  anche in questa metterci onCreateOptionsMenu ed onOptionsItemSelected? se si però in questo caso quando modifico il menu avrei 2 file da andare a modificare....non sò quanto mi convenga..

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Menu in più activity
« Risposta #14 il: 07 Marzo 2012, 08:53:49 CET »
0
Tu praticamente dici di fare una cosa del tipo ''public abstract class ListAbstract extends ListActivity'' e  anche in questa metterci onCreateOptionsMenu ed onOptionsItemSelected? se si però in questo caso quando modifico il menu avrei 2 file da andare a modificare....non sò quanto mi convenga..
appunto, ecco perchè ti conviene fare come detto da blackgin
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia