2012-07-21 14 views
5

Nella mia applicazione in tutto il mondo voglio che il pulsante di ricerca esegua un separato Activity. Ad esempio, da qualsiasi punto dell'app quando preme il pulsante di ricerca voglio che venga richiamata un'attività separata."Funzione di ricerca" globale nell'intera app

C'è un modo che invece di definire onSearchRequested() in ogni attività, l'ho semplicemente configurato in un posto (come Manifest.xml) e può essere utilizzato in tutta l'app?

+0

Assicuratevi di contrassegnare la risposta corretta se lo avete usato. In caso contrario, fornirci maggiori informazioni. – Michal

risposta

6

È possibile definire una classe (non necessariamente) astratta che estende Attività, implementare onSearchRequest e ereditare tutte le altre classi di attività da quella classe. In questo modo devi solo definire il comportamento onSearch solo una volta.

cioè

public abstract class MyBaseActivity extends Activity { 
    @Override 
    public void onSearchRequest() { 
     // Your stuff here 
    } 
} 

public class MyActivity1 extends MyBaseActivity { 
    // OnSearchRequest is already implemented 
} 

Se si prevede di utilizzare più sottoclassi di attività, vale a dire ListActivity, questo potrebbe non essere una buona soluzione, come si deve creare una classe di base astratta per tutte le sottoclassi di attività che si usa. In questo caso vi consiglio di creare una classe aggiuntiva, incapsulando il codice di gestione bottone di ricerca e chiamo da voi attività onSearchRequest, cioè

public class SearchButtonHandle { 
    public void handleSearch(Context c) { 
     // Your search btn handling code goes here 
    } 
} 

public class MyActivity1 extends Activity { // Or ListActivity .... 
    @Override 
    public void onSearchRequest() { 
     new SearchButtonHandle().handleSearch(this); 
    } 
} 

Naturalmente è anche possibile combinare entrambi approches definendo un Estratto sottoclasse di tutte le attività Sottoclassi utilizzate e implementate onSearchRequest come nell'esempio precedente con un gestore di ricerca esterno

+0

Questa è davvero una grande idea, ma cosa succede se vuole usare l'attività ListView da qualche parte? – Michal

+1

@Michal Immagino che in quel caso dipenda, Se usa più ListActivities o altre sottoclassi di Activity, la composizione potrebbe essere una soluzione migliore dell'ereditarietà. Poteva ad esempio creare una classe di gestione della ricerca che incapsulasse il codice per la gestione del pulsante di ricerca e chiamasse taht da tutte le attività. Modificherò la mia risposta per indicarlo con un esempio –

Problemi correlati