In questo breve tutorial realizzeremo una piccola activity per la ricerca di contenuti, memorizzati in un file xml, da inserire nelle nostre applicazioni.Ultimamente ho avuto la necessità di realizzare un’activity di ricerca.. Ho cercato un pò in giro per il web ma le guide a disposizione mi sono parse troppo fumose e non rispondevano alle mie esigenze e quindi…ho scritto una activity che consente di effettuare una ricerca.

La situazione di riferimento è la seguente: abbiamo un file xml molto grande (posizionato in values del nostro progetto eclipse) ed abbiamo la necessità di effettuare una ricerca, in base al contenuto scritto dall’utente.

Di seguito posto il codice che si occupa della ricerca, con qualche comento.

EditText search= (ImageView) findViewById(R.id.seachText);        //editText di ricerca
ImageView imgSearch = (ImageView) findViewById(R.id.imageView1);  //immagine "start ricerca"
imgSearch.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
     String searchString = search.getText().toString();
                                        //se clicco, prendo il contenuto della EditText
     searchString = search.toLowerCase();

         for (int j=1; j<xml.length(); j++){
            int itemId = getResources().getIdentifier("item"+Integer.toString(j), "string",getPackageName());
                                        //prendo l'id di ogni item
            String name = getResources().getString(itemId).toLowerCase();
                                         //prendo il contenuto dell'item
               if (name.contains(searchString)){
                                      //verifico se è presente la parola cercata
                  Intent intent = new Intent(getApplicationContext(), act.class);
                                      //se trovo la parola cercata,
                  intent.putExtra("start", j);
                                      //richiamo la stessa act e gli passo l'indice j trovato
                  finish();
                  startActivity(intent);
                  break;
               }

               if (j == xml.length())   //se non trovo la parola, visualizzo un messaggio
                  Toast.makeText(v.getContext(), getString(R.string.notFound), Toast.LENGTH_SHORT).show();
               }
         }
  });

Vi posto anche un pezzo di XML per farvi capire il motivo dell’istruzione

int itemId = getResources().getIdentifier("item"+Integer.toString(j) ,"string",getPackageName());

Ecco l’XML

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string name="item1">Airone</string>
	<string name="item2">Albatro</string>
	<string name="item3">Alce</string>
	...
        ...
</resources>

A questo punto, trovato l’indice, mi organizzo il layout per come serve a me.

Spero di esservi stato utile!!

Alla prossima