Autore Topic: Custom Adapter non viene filtrato  (Letto 533 volte)

Offline elia_90

  • Nuovo arrivato
  • *
  • Post: 27
  • Fletto i muscoli e sono nel vuoto -.-
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 8, Mac OS X 10.8
Custom Adapter non viene filtrato
« il: 10 Aprile 2013, 22:51:45 CEST »
0
Ciao a tutti,

ho implementato un custom adapter per dare colore alternato alle righe della listView, ecco il codice de custom adapter:

public class CustomAdapter extends ArrayAdapter<String> {

    protected static final int NO_SELECTED_COLOR = Color.LTGRAY;
    protected static final int SELECTED_COLOR = Color.CYAN;

    int flag = 0;
    private ArrayList<String> items;
    private LayoutInflater mInflater;
    private int viewResourceId;

    public CustomAdapter(Activity activity,int resourceId,
        ArrayList<String> list) {
        super(activity,resourceId,list);

        // Sets the layout inflater
        mInflater = (LayoutInflater)activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // Set a copy of the layout to inflate
        viewResourceId = resourceId;

        // Set a copy of the list
        items = list;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView tv = (TextView)convertView;
        if (tv == null) {
            tv = (TextView)mInflater.inflate(viewResourceId, null);
        }
        tv.setText(items.get(position));

        // Change the background color
        if (flag == 0) {
           tv.setBackgroundColor(0x0000000);
           flag ++;
        }
        else {
           tv.setBackgroundColor(0xA000000);
           flag --;
        }

        return tv;
    }
   

}


e fin qui tutto bene, ma siccome ho un editText che mi filtra la lista, se uso la custom adapter, filtra correttamente, perchè quando clicco su uno degli elementi filtrati, passo la stringa contenuta al suo interno ad un'altra activity, che la stampa correttamente...il problema che quando ancora sono nell'activity dove visualizzo la lista intera, se inserisco il testo nell'editText mi visualizza sempre i primi elementi della lista:
faccio un esempio che è meglio:

questa è la lista iniziale con l'editText ->


questa è la lista quando filtro ->


e questa è l'activity dove viene passata la stringa quando premo sull'unico elemento rimasto->

come vedete il problema sussiste nella visualizzazione degli elementi filtrati nella lista, perchè il passaggio di valori è corretto.

Vi posto il codice della editText:

inputSearch.addTextChangedListener(new TextWatcher() {
             @Override
             public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                 adapter.getFilter().filter(cs);
             }
             @Override
             public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3){}
             @Override
             public void afterTextChanged(Editable arg0) {}
         });


dove adapter è il customAdapter; avete consigli? grazie in anticipo ;)
« Ultima modifica: 10 Aprile 2013, 22:55:07 CEST da elia_90 »

Offline DevAndroid40

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG E975
  • Sistema operativo:
    Max OS X
Re:Custom Adapter non viene filtrato
« Risposta #1 il: 11 Aprile 2013, 10:01:01 CEST »
0
Codice (Java): [Seleziona]
private class PlanetFilter extends Filter {
     @Override
    protected FilterResults performFiltering(CharSequence constraint) { .... }

   @Override
   protected void publishResults(CharSequence constraint,FilterResults results) { ..... } } -

dove in performFiltering tu devi fare il filtro dei dati e poi in publishResult li pubblichi sulla lista. Chiami poi il notifyDataChanged()?...Se cancelli un carattere sul box del filtro come si comporta la tua lista?
Dà un'occhiata http://www.survivingwithandroid.com/2012/10/android-listview-custom-filter-and.html per altre info

Offline elia_90

  • Nuovo arrivato
  • *
  • Post: 27
  • Fletto i muscoli e sono nel vuoto -.-
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 8, Mac OS X 10.8
Re:Custom Adapter non viene filtrato
« Risposta #2 il: 11 Aprile 2013, 10:42:29 CEST »
0
il notifydatachanged non ho ben capito a cosa serva, dato che con arrayadapter daceva tutto lui non me ne sono molto preoccupato;
 se io scrivo nell' edittext il numero di risultati che compaiono corrispondono a quelli che mi aspetto, l'unica cosa è che appaiono coni nomi di quelle posizioni senza lista filtrata, come se scalasse le position e basta. se se la lista filtrata conta solo di 5 elementi, quelli visualizzati sono i primi 5 della lista non filtrata, come se semplicemente toglie gli elementi dopo e basta, ma in realtà se si preme su uno di essi, nella nuova activity viene visualizzato il nome vero, quindi il problema è nell'interfaccia del filtro semplicemente...idee?

Offline DevAndroid40

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG E975
  • Sistema operativo:
    Max OS X
Re:Custom Adapter non viene filtrato
« Risposta #3 il: 12 Aprile 2013, 21:50:57 CEST »
0
Scusa ma la classe che estende Filter dove implementi le tue logiche di filtraggio dove sta?
Il notifyDataChanged serve per dire alla ListView che deve "aggiornare" i dati visualizzati. Se modifiche i dati nell'adapter ma non chiami il notifyDataChanged non li vedi aggiornati.

Offline elia_90

  • Nuovo arrivato
  • *
  • Post: 27
  • Fletto i muscoli e sono nel vuoto -.-
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 8, Mac OS X 10.8
Re:Custom Adapter non viene filtrato
« Risposta #4 il: 13 Aprile 2013, 22:21:34 CEST »
0
il filtro personalizzato non c'è perché funzionando con gli arrayadapter normali, pensavo non si dovesse toccare, se faccio un custom adapter devo per forza implementare un nuovo filtro, anche se quello sull'arrayadapter funzionava?

Offline DevAndroid40

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG E975
  • Sistema operativo:
    Max OS X
Re:Custom Adapter non viene filtrato
« Risposta #5 il: 16 Aprile 2013, 10:34:34 CEST »
0
Si lo devi implementare altrimenti come fa a filtrare i dati?!

Offline elia_90

  • Nuovo arrivato
  • *
  • Post: 27
  • Fletto i muscoli e sono nel vuoto -.-
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 8, Mac OS X 10.8
Re:Custom Adapter non viene filtrato
« Risposta #6 il: 16 Aprile 2013, 11:32:49 CEST »
0
e il filtro lo dichiaro direttamente nella classe CustomAdapter giusto?
poi nell'actovity come lo richiamo quando richiamo il metodo setonchangetext della inputext?