Filtro per ChoiceGroup POPUP


Il ChoiceGroup è un componente della libreria LCDUI di MIDP che consente di visualizzare liste di elementi a scelta multipla o esclusiva all’interno di un Form. Il ChoiceGroup dispone della modalità POPUP, che consente la selezione di un singolo elemento attraverso una piccola finestra di popup, riducendo lo spazio occupato sul Form e migliorandone di conseguenza la leggibilità.

A differenza di altre librerie di componenti, LCDUI non consente di filtrare la lista digitando le prime lettere della parola cercata. Su Python per Series 60, ad esempio, il componente selection_list dispone di questa funzionalità facilmente attivabile in fase di visualizzazione. Si consideri il seguente frammento di codice, che visualizza una lista di paesi della Sardegna:


import appuifw

cities = [u"Abbasanta", 
            u"Budduso'", 
            u"Cagliari", 
            u"San Gavino", 
            u"Sassari", 
            u"Serri", 
            u"Sestu"]

index = appuifw.selection_list(cities , 1)


Come visibile in questo snapshot di un Nokia 6630, alla pressione di una lettera sul keypad, la lista viene automaticamente filtrata e, dunque, ridotta:

listpython.png

In ambiente MIDP è possibile implementare questa funzionalità utilizzando un TextField e registrando un ItemStateListener che aggiorna il ChoiceGroup in base al testo digitato dall’utente. Il codice sorgente è semplice (ma, ahime’, non estremamente sintetico come in Python):


public class SearchForm 
         extends Form 
         implements ItemStateListener {

  private String CITIES[] = new String[] {
                "Abbasanta", 
                "Budduso'", 
                "Cagliari", 
                "San Gavino", 
                "Sassari", 
                "Serri", 
                "Sestu"};

  private ChoiceGroup citiesList;
  private TextField searchField;

  public SearchForm() {
    super("Seleziona citta'");
    init();
  }

  private void init() {
    citiesList = new ChoiceGroup("Citta' (" 
                    + CITIES.length + "): ",  Choice.POPUP);
    citiesList.setLayout(Item.LAYOUT_SHRINK);

    for (int i = 0; i < CITIES.length; i++) {
      citiesList.append(CITIES[i], null);
    }

    append(citiesList);
    searchField = new TextField("Cerca: ", "", 40, 
                                          TextField.ANY);
    searchField.setLayout(Item.LAYOUT_NEWLINE_AFTER);
    setItemStateListener(this);
    append(searchField);
  }

  public void itemStateChanged(Item item) {
    if (item == searchField) {
      updateList();
    }
  }

  private void updateList() {
    citiesList.deleteAll();
    for (int i = 0; i < CITIES.length; i++) {
      if (CITIES[i].startsWith(searchField.getString())) {
        citiesList.append(CITIES[i], null);
      }
    }
    citiesList.setLabel("Citta' (" + citiesList.size() + "): ");
  }

} 

Eccolo in esecuzione su Nokia 6120c:

searchform_small_1.png

Digitando sul TextField si attiva il filtraggio della lista:

searchform_small_2.png

Grazie…


Fine anno è l’occasione per fare un bilancio dei 365 giorni appena trascorsi, magari per cercare di capire quanti dei desideri espressi nel capodanno sono davvero diventati realta’ e quali invece restano in eredità al nuovo anno.

È fuori luogo fare bilanci sul blog, ma guardando solo alle cose positive sento di dover dire grazie per questo 2007 ormai agli sgoccioli. È stato un anno molto faticoso su tutti i fronti, ma non ho mai avuto la percezione che fosse tempo perso. Ringrazio chi mi ha amato, perchè solo questo basterebbe per vivere felici. Ringrazio chi mi ha dato lavoro, perchè senza sarebbe stato tutto difficile, se non impossibile. Ringrazio i nuovi amici di Roma, che mi hanno aiutato a sertirmi a casa anche nella Capitale, e ringrazio gli amici dell’Isola, che mi fanno sentire come se non fossi mai partito. Ringrazio tutti coloro che mi hanno insegnato qualcosa, ringrazio coloro che mi hanno dato fiducia imparando qualcosa da me. Ringrazio chi mi ha tirato le orecchie le innumerevoli volte che ho fatto cavolate. Ringrazio anche chi non ha avuto possibilità di tirarmele, ma mi ha perdonato comunque. Ringrazio anche chi mi ha fatto arrabbiare, perchè ha contribuito a rendere più bello tutto il resto!

Visto che siamo sul web, ringrazio gli oltre 200 mila visitatori del blog del 2007, ringrazio coloro che hanno partecipato ai miei seminari e coloro hanno letto il libro.

Nella briciola di storia del mondo che vivo, il 2007 è stato un anno bello. Spero il 2008 sia altrettanto, se non meglio. Per tutti, ovviamente!

MIDP 3 Public Review Draft


Il Java Community Process ha appena rilasciato la specifica Public Review Draft di MIDP 3, reperibile all’indirizzo http://jcp.org/en/jsr/stage?listBy=public. Più o meno come un anno fa (era il Natale 2006…), la review si concluderà dopo tre mesi, ovvero a marzo 2008.

Ci è voluto un anno per passare dall’Early Draft alla Public Review. Credo sia normale che di fronte a tanta lentezza del JCP vi siano iniziative come quella della Open Handset Alliance, pur scegliendo la piattaforma Java come base applicativa per Android, abbandoni del tutto JME e predisponga un set di API alternative. Qualcuno sostiene che MIDP3 non farà in tempo a vedere la luce e che l’intervallo di tempo tra la specifica finale (attesa per giugno 2008), la disponibilità dei primi dispositivi e la loro progressiva diffusione sarà così lungo che sarà ormai tempo di avere CDC/PP o qualcos’altro anche sui terminali entry level.

Io non sono così drastico e pessimista, ma sono convinto che l’inerzia che MIDP3 manifesta non giovi a nessuno, neppure a coloro che stanno spendendo tempo e risorse per redigerne la specifica. Rispetto a qualche anno fa, il mondo del mobile computing non è più una nicchia: è una arena, piena di gladiatori e belve feroci. Ci sono i produttori dei terminali, ormai rimasti praticamente in cinque (Nokia, Motorola, Samsung, LG, Sony-Ericsson), e le cordate che supportano gli ambienti operativi (Java ME, Symbian, Windows Mobile, Flash Lite, Linux in varie salve). Ciascuno nel proprio dominio (hw o sw), talvolta saltando e componendo scelte azzardate che miscelano hardware e software, è pronto a vendere la famiglia per sbaragliare la concorrenza. In questo senso essere lenti e poco reattivi rispetto al mercato può essere fatale.

Quesiti dei lettori


Alcuni lettori del libro mi hanno scritto chiedendomi alcuni approfondimenti su argomenti specifici (Bluetooth, serializzazione…). Visto che alcune domande sono simili, ho pensato di preparare un aggiornamento agli esempi e un piccolo articolo di approfondimento, che pubblicherò a giorni. Gli impegni pre-natalizi sono tanti e il tempo sempre poco, vi chiedo di avere un po’ di pazienza… Grazie.

Non solo radio…


La radio non è stata l’unica protagonista della gita a Silvi Marina di fine novembre. Tappa in riva al mare, a mangiare un po’ di pesce prima di andare alla fiera. La spiaggia è dorata, anche senza sole appare bella e invita a tornarci in primavera o d’estate.

silvi_mare.jpg

Facciamo tappa al ristorante “Da Alfredo”, che offre solo piatti di pesce. Prendiamo “chitarrine ai frutti di mare”:

silvi_chitarrine.jpg

e “gnocchi della casa agli scampi”.

silvi_gnocchi.jpg

Le chitarrine sono ottime, con un gusto di mare ben presente e il resto degli aromi ben armonizzato. Gli gnocchi, ahimè, sono meno saporiti. Anzi, gli gnocchi in sé sono buoni, ma il condimento è meno saporito. Effettivamente la cameriera mi ha proposto di prenderli “bianchi”, che forse sarebbe stata la scelta migliore. Come secondo abbiamo preso una frittura, e in questo caso mare e cuoco hanno fatto spettacolo!

silvi_frittura.jpg

Ci aspettavamo i classici anelli di calamaro, invece si trattava di un buonissimo mix di calamaretti (dolcissimi e morbidissimi), gamberi, piccole sogliole, triglie, cicale e granchi. Gli ultimi, in particolare, sono stati una vera sorpresa: non mi è mai capitato di mangiare granchi fritti, ma devo dire che sono davvero buoni. Top del top i calamari, merito anche della sapiente frittura leggera e attenta del cuoco.

Alla prossima!