Autore Topic: Problema con position ArrayList  (Letto 404 volte)

Offline Misterxxx

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus N5
  • Sistema operativo:
    Win 7/10
Problema con position ArrayList
« il: 25 Settembre 2015, 07:28:03 CEST »
0
Ho un problema con un ArrayList, mi occorre la posizione dell'elemento trovato per "stringa" per scorrere la lista fino ad esso.
Sono newbie :( , la stringa viene trovata ma la posizione non è esatta (anzi "pos" è sempre 0 ...):
Codice: [Seleziona]
     public int trovaNome(String string) {
        if (string.length()>0) {
        int pos = -1;
            for (Clienti RS : myDataset) {
                final String text = RS.getNome();
                if (text.contains(string)) {
                        pos = text.indexOf(string);
                        Toast.makeText(this, string + pos, Toast.LENGTH_SHORT).show();
                        //mRecyclerView.scrollToPosition(pos);
                }
            }
        }
            return 0;
    }


dove sbaglio? grazie !!!!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Problema con position ArrayList
« Risposta #1 il: 25 Settembre 2015, 08:27:29 CEST »
0
mettiamo caso che tu abbia nella lista: "ciao, palla, cane"
Se chiami il metodo con "pal" (senza la) ottieni che palla contiene pal ovviamente. Però dopo non puoi chiamare .indexOf passando come parametro "pal": Devi passargli palla ovvero devi chiamare quel metodo con il campo text.

Offline Misterxxx

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus N5
  • Sistema operativo:
    Win 7/10
Re:Problema con position ArrayList
« Risposta #2 il: 25 Settembre 2015, 08:43:00 CEST »
0
minGhia come hai ragggggione :)
appena possibile provo, grazie !!!

ma se indexOf deve essere fatto su text, allora così?
Codice: [Seleziona]
pos = RS.getNome().indexOf(text);

ma torna 0 lo stesso ..
« Ultima modifica: 25 Settembre 2015, 08:49:44 CEST da Misterxxx »

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problema con position ArrayList
« Risposta #3 il: 25 Settembre 2015, 09:33:54 CEST »
0
Torna 0 perché hai un return 0 alla fine.

In ogni caso 0 è il primo elemento dell'ArrayList.
I numeri contano molto di più del seme.

Offline Misterxxx

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus N5
  • Sistema operativo:
    Win 7/10
Re:Problema con position ArrayList
« Risposta #4 il: 25 Settembre 2015, 09:44:30 CEST »
0
Codice: [Seleziona]
    public int trovaNome(String string) {
        int pos = -1;
        if (string.length() > 0) {
            for (Clienti RS : myDataset) {
                final String text = RS.getNome();
                if (text.contains(string)) {
                    pos = RS.getNome().indexOf(text);
                    Toast.makeText(this, string + pos, Toast.LENGTH_SHORT).show();
                    //mRecyclerView.scrollToPosition(pos);
                }
            }
        }
        return pos;
    }
torna comunque 0 e non è la posizione esatta (per certo, la stringa cercata è alla pos 39)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Problema con position ArrayList
« Risposta #5 il: 25 Settembre 2015, 10:17:29 CEST »
0
Codice (Java): [Seleziona]
cliente è una classe del tipo:
static class Cliente {
  String nome,tel;
  getNome()
  getTel()
  setNome()    
}

 List<Cliente> list = new ArrayList<>();

void riempi(){

 list.add(new Cliente("alessio",100));
 list.add(new Cliente("diego",101));
 list.add(new Cliente("marco",102));
}

int pos cercaCliente(String s){
  for(Cliente cl : list){
        if(cl.contains(s){
                // cliente trovato
                int indexCliente = list.indexOf(cl);  
                return indexCliente;    
        }
  }
  return -1;
       
}

Questo codice è banale.  Aggiungi 10 elementi. Cerca una stringa nella lista. Deve funzionare per forza.

Offline Misterxxx

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus N5
  • Sistema operativo:
    Win 7/10
Re:Problema con position ArrayList
« Risposta #6 il: 25 Settembre 2015, 10:50:28 CEST »
0
non funge :(
Clienti.java
Codice: [Seleziona]
public class Clienti {
    private String nome;
    private String telefono;
    private String mobile;
    private String email;

    public Clienti(String nome, String telefono, String mobile, String email) {
        super();
        this.nome = nome;
        this.telefono = telefono;
        this.mobile = mobile;
        this.email = email;

    }

    public String getNome() {
        return nome;
    }

    public String getTelefono() {
        return telefono;
    }
    public String getMobile() {
        return mobile;
    }
    public String getEmail() {
        return email;
    }

}
la struttura dell'ArrayList è:
Codice: [Seleziona]
myDataset.add(new Clienti(RS, tl, cell, email));
questo per trovare la stringa da una EditText (e1)
Codice: [Seleziona]
trovaNome(e1.getText().toString());
questa il codice incriminato:
Codice: [Seleziona]
public int trovaNome(String string) {
        int pos = -1;
        if (string.length() > 0) {
            for (Clienti RS : myDataset) {
                final String text = RS.getNome();
                if (RS.getNome().contains(string)) {
                    pos = RS.getNome().indexOf(text);
                    Toast.makeText(this, text + pos, Toast.LENGTH_SHORT).show();
                    //mRecyclerView.scrollToPosition(pos);
                }
            }
        }
        return -1;
    }

così torna pos = 0
con: pos = myDataset.indexOf(text); torna -1

Offline iClaude

  • Utente normale
  • ***
  • Post: 177
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Problema con position ArrayList
« Risposta #7 il: 25 Settembre 2015, 11:49:53 CEST »
0
Così non stai cercando la posizione all'interno dell'ArrayList, ma l'indice da cui parte la stringa di ricerca all'interno del campo nome del tuo cliente. Ovvio che ritorna 0 se le due stringhe sono uguali.
Ciò che devi fare è tenere un indice da incrementare ad ogni iterazione del ciclo e restituirlo non appena trovi la stringa cercata.

Offline Misterxxx

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus N5
  • Sistema operativo:
    Win 7/10
Re:Problema con position ArrayList
« Risposta #8 il: 25 Settembre 2015, 11:59:42 CEST »
0
Perfetto, funzia :) :)
Grazie iClaude e a tutti !!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Problema con position ArrayList
« Risposta #9 il: 25 Settembre 2015, 13:33:22 CEST »
0
Comunque il codice da me postato è corretto. Difatti io chiamo indexOf su un oggetto di tipo lista.

Offline Misterxxx

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus N5
  • Sistema operativo:
    Win 7/10
Re:Problema con position ArrayList
« Risposta #10 il: 25 Settembre 2015, 14:14:25 CEST »
0
Sì, certo, non escludo possa servirmi in futuro anche quella posizione ma al momento mi serviva quella assoluta nell'array.
Grazie :)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Problema con position ArrayList
« Risposta #11 il: 25 Settembre 2015, 15:07:12 CEST »
0
E infatti il codice da me messo fa quello che chiedi

Offline Misterxxx

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus N5
  • Sistema operativo:
    Win 7/10
Re:Problema con position ArrayList
« Risposta #12 il: 25 Settembre 2015, 15:17:44 CEST »
0
Non so dirti, non sono qualificato per risponderti :(
Posso solo dire che con l'ultimo codice postato restituisce 0 mentre con questo restituisce la giusta posizione:
Codice: [Seleziona]
public int trovaNome(String string) {
        int pos = -1;
        if (string.length() > 0) {
            for (Clienti RS : myDataset) {
                pos++;
                //final String text = RS.getNome();
                if (RS.getNome().contains(string)) {
                    mRecyclerView.scrollToPosition(0);
                    mRecyclerView.scrollToPosition(pos);
                }
            }
        }
        return -1;
    }

edit:
visto che devo imparare ho provato a riscrivere il tuo codice da zero e funziona :)
Probabilmente avevo scritto male qualcosa ... funzionano entrambi i codici :)
« Ultima modifica: 25 Settembre 2015, 15:23:55 CEST da Misterxxx »