Autore Topic: Indice originale array per ListView post setTextFilterEnabled  (Letto 678 volte)

Offline carlok

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Indice originale array per ListView post setTextFilterEnabled
« il: 18 Novembre 2010, 18:58:21 CET »
0
Partendo dall'esempio di ListActivity mostrato qui
List View | Android Developers
filtro premendo "b" (mostra gli Stati il cui nome ha una parola che inizia con "b")
come individuare la posizione dell'elemento scelto dal "click" nell'array DI PARTENZA?

Nota: una domanda simile era presente in un vecchio thread, ovvero
[RISOLTO] AutoCompleteTextView - Android Developers Italia
ma il forum suggerisce di aprire un nuovo thread se non ci sono risposte da oltre 120 giorni...
inoltre, l'utente pivot che suggeriva di usare
String selected = (String) parent.getItemAtPosition(position)
concludeva dicendo che la posizione si sarebbe potuta ricavare semplicemente, essendo un oggetto, pur restituendo selected la posizione nell'array filtrato, non in quello originale: chiedo quindi, dato che per me non è così scontato come fare... rispetto all'esempio della documentazione di Android andrebbe benissimo.
Grazie.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Indice originale array per ListView post setTextFilterEnabled
« Risposta #1 il: 18 Novembre 2010, 20:20:41 CET »
0
Ti conviene lavorare con gli id, andando a sovrascrivere il metodo getItemId nel tuo adapter.

Offline Nicola_D

  • Moderatore
  • 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:Indice originale array per ListView post setTextFilterEnabled
« Risposta #2 il: 18 Novembre 2010, 20:53:43 CET »
0
Ti conviene lavorare con gli id, andando a sovrascrivere il metodo getItemId nel tuo adapter.
non capisco che intendi...
ho anche io un problema simile,ho un'array di stringhe e se faccio
String selected = (String) parent.getItemAtPosition(position);
Mi restituisce la stringa corretta,però se faccio
long id = (long) parent.getItemIdAtPosition(position);
ovviamente mi da Id sbagliato,perchè credo che il parent sia la view con gli elementi filtrati. A questo punto, mi sa che usando un'array di stringhe mi tocca cercare a mano l'indice della stringa ottenuta, giusto? nel mio caso va anche bene, visto che ho solo 6 stringhe, ma fosse una lista piu lunga bisognerebbe usare una collection o un'hashmap...

Ho preparato un progetto Eclipse per un tutorial, ho fatto anche gli screen ma ora son cotto, se arrivo domani lo posto.
L'ho fatto per mostrare il dropDownMenu e il problema degli ID...
« Ultima modifica: 18 Novembre 2010, 22:21:59 CET da Nicola_D »
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 carlok

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Re:Indice originale array per ListView post setTextFilterEnabled
« Risposta #3 il: 19 Novembre 2010, 09:41:17 CET »
0
Nicola_D: ottima idea e grazie, se ci riuscirò, come faccio di solito - pur essendo nuovo su Android- scriverò anch'io qualcosa.

Per capire e far capire, immagino il caso estremo di un array di stringhe tutte identiche: getItemAtPosition mi restituirebbe una ben poco utile stringa, che non potrei certo usare come chiave per una ulteriore ricerca nell'array originario. Vado a provare e resto anch'io in attesa del tuo tutorial o di altro.

Vi ringrazio per ora entrambi.

Offline Nicola_D

  • Moderatore
  • 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:Indice originale array per ListView post setTextFilterEnabled
« Risposta #4 il: 19 Novembre 2010, 11:08:29 CET »
0
Nicola_D: ottima idea e grazie, se ci riuscirò, come faccio di solito - pur essendo nuovo su Android- scriverò anch'io qualcosa.

Per capire e far capire, immagino il caso estremo di un array di stringhe tutte identiche: getItemAtPosition mi restituirebbe una ben poco utile stringa, che non potrei certo usare come chiave per una ulteriore ricerca nell'array originario. Vado a provare e resto anch'io in attesa del tuo tutorial o di altro.

Vi ringrazio per ora entrambi.

in questo caso non vedo il senso di avere due elementi UGUALI in una lista, ma a parte questo,bisogna guardare perchè ho visto che è possibile passargli un oggetto all'autocomplete, e penso che in quel caso funziona come con la listview e il cursor,cioè l'id è l'id dell'oggetto... ma non ho mai provato.

Se invece non è possibile, basta creare gli oggetti cosi: "STRINGA - i" dove i è l'indice nell'array, dopodichè fai uno string.split(" - ") e hai uno String[] con nel posto 0 il testo, nel posto 1 l'id effettivo (unica pecca di questa soluzione è che graficamente fa schifo)... ah, al limite basta farsi una view personalizzata per il single item del menu che compare, in cui metti l'id come non visibile, penso che poi te lo prenda giusto alla chiamata dell'onclick... son tutte prove da fare, al momento però non ne ho il tempo
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 carlok

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Re:Indice originale array per ListView post setTextFilterEnabled
« Risposta #5 il: 19 Novembre 2010, 11:25:14 CET »
0
Casi di stringhe uguali possono capitare (se hai ad esempio un elenco di persone, anche con nome+cognome non puoi escludere di avere due elementi uguali).

Comunque, ci sono fin qui tre strade
1) L'idea di aggiungere un id nella stringa (sempre nell'esempio di prima "Nome Cognome - 12" o varianti) l'avevo avuta anche io ma me la tengo come riserva, essendo in fondo un trucco.
2) Idem l'idea di mettere nella view un campo tipo gli hidden nei form html... pure io devo provare e di stamattina non sono ancora riuscito :(
3) Forse la migliore (ma dovrei proprio capire come) è quella suggerita da Ricky, ovvero override di getItemId

Spero di farmi vivo presto con qualche novità.

Offline carlok

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Re:Indice originale array per ListView post setTextFilterEnabled
« Risposta #6 il: 20 Novembre 2010, 14:57:03 CET »
0
non potendo star troppo sul problema, per ora chiudo il topic con la soluzione 1 (token sulla stringa), sperando di tornar sull'argomento quando sarò più robusto :)