Autore Topic: Csv e visualizzazione di una determinata riga  (Letto 714 volte)

Offline xixietto

Csv e visualizzazione di una determinata riga
« il: 28 Aprile 2017, 07:08:20 CEST »
0
Salve, ho creato un modo per visualizzare un file csv tramite una listview.. funziona tutto correttamente, ma ora vorrei cercare nel file csv un determinato testo. Sapete come fare?
 

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Csv e visualizzazione di una determinata riga
« Risposta #1 il: 28 Aprile 2017, 10:58:14 CEST »
0
Se usi un ArrayAdapter è piuttosto semplice:

Codice (Java): [Seleziona]
adapter.getFilter().filter("Testo");
Per fare la ricerca durante la digitazione, intercetta le modifiche con un TextWatcher:

Codice (Java): [Seleziona]
casellaRicerca.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) {
            }
});

Se usi un altro adapter diventa un po' più complicato, dai un'occhiata qui: http://stackoverflow.com/a/24771174/466938
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Csv e visualizzazione di una determinata riga
« Risposta #2 il: 28 Aprile 2017, 11:04:44 CEST »
0
Ho provato ma nn succede nulla.. appena torno a casa vi posto il codice

Inviato dal mio SM-G925F utilizzando Tapatalk


Offline xixietto

Re:Csv e visualizzazione di una determinata riga
« Risposta #3 il: 28 Aprile 2017, 11:07:33 CEST »
0
Forse perché il file csv è molto grande?

Inviato dal mio SM-G925F utilizzando Tapatalk


Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Csv e visualizzazione di una determinata riga
« Risposta #4 il: 28 Aprile 2017, 12:27:30 CEST »
0
Usi un ArrayAdapter?
Quanti elementi ci sono nel CSV?
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Csv e visualizzazione di una determinata riga
« Risposta #5 il: 28 Aprile 2017, 13:03:56 CEST »
0
È un database ufficiale del ministero.. ed è molto grande..  anche se scrivo del testo nn mi trova nulla.. È come se nn esistesse la textwarcher

Inviato dal mio SM-G925F utilizzando Tapatalk

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Csv e visualizzazione di una determinata riga
« Risposta #6 il: 28 Aprile 2017, 13:36:06 CEST »
0
Ma ci arriva a chiamare getFilter().filter(cs)?

In ogni caso dai un'occhiata anche al link che ti ho mandato: http://stackoverflow.com/a/24771174/466938
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Csv e visualizzazione di una determinata riga
« Risposta #7 il: 28 Aprile 2017, 17:19:30 CEST »
0
ma questo non da nessun risultato
Codice (Java): [Seleziona]
  cerca.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text
                //HttpHandler_result.this.itemArrayAdapter.getFilter().filter(cs);

                String text = cerca.getText().toString().toLowerCase(Locale.getDefault());
                itemArrayAdapter.getFilter().filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });

Post unito: 28 Aprile 2017, 17:35:15 CEST
ecco il codice completo
Codice: [Seleziona]
public class HttpHandler_result extends AppCompatActivity{
    private ListView listView;
    private Csv_array itemArrayAdapter;
    EditText cerca;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.csv);
        listView = (ListView) findViewById(R.id.listView);
        cerca = (EditText) findViewById(R.id.editText6);

        itemArrayAdapter = new Csv_array(getApplicationContext(), R.layout.csv_item);

        Parcelable state = listView.onSaveInstanceState();
        listView.setAdapter(itemArrayAdapter);
        listView.onRestoreInstanceState(state);

        InputStream inputStream = getResources().openRawResource(R.raw.stabilimenti);
        CsvFile csvFile = new CsvFile(inputStream);
        List scoreList = csvFile.read();

        for(Object scoreData:scoreList ) {
            itemArrayAdapter.add(scoreData);
        }

        cerca.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence text, int arg1, int arg2, int arg3) {
                // When user changed the Text
                //HttpHandler_result.this.itemArrayAdapter.getFilter().filter(cs);
                HttpHandler_result.this.itemArrayAdapter.getFilter().filter("PESCARA");

               // String text = cerca.getText().toString().toLowerCase(Locale.getDefault());
               // itemArrayAdapter.getFilter().filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });



    }

}
Codice: [Seleziona]
public class Csv_array extends ArrayAdapter {
    private List scoreList = new ArrayList();

    static class ItemViewHolder {
        TextView approval_number;
        TextView ragione_sociale;
        TextView comune;
    }

    public Csv_array(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }


    @Override
    public int getCount() {
        return this.scoreList.size();
    }

    @Override
    public Object getItem(int index) {
        return this.scoreList.get(index);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ItemViewHolder viewHolder;
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.csv_item, parent, false);
            viewHolder = new ItemViewHolder();
            viewHolder.approval_number = (TextView) row.findViewById(R.id.approval_number);
            viewHolder.ragione_sociale = (TextView) row.findViewById(R.id.ragione_sociale);
            viewHolder.comune = (TextView) row.findViewById(R.id.comune);
            row.setTag(viewHolder);
        } else {
            viewHolder = (ItemViewHolder)row.getTag();
        }
        String[] stat = (String[]) getItem(position);
        viewHolder.approval_number.setText(stat[2]);
        viewHolder.ragione_sociale.setText(stat[3]);
        viewHolder.comune.setText(stat[5]);
        return row;
    }

    public void add(Object object) {
        scoreList.add(object);
        super.add(object);
    }
}
« Ultima modifica: 28 Aprile 2017, 17:35:15 CEST da xixietto, Reason: Merged DoublePost »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Csv e visualizzazione di una determinata riga
« Risposta #8 il: 28 Aprile 2017, 18:16:54 CEST »
0
Prova a cambiare il codice di onTextChanged:

Codice (Java): [Seleziona]
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
  String text = cs.toString().toLowerCase(Locale.getDefault());
  itemArrayAdapter.getFilter().filter(text);
}

se non funziona aggiungi il codice che segue nella classe Csv_array:

Codice (Java): [Seleziona]
    ArrayList mOriginalValues = null;

    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,FilterResults results) {

            scoreList = (ArrayList) results.values; //Il risultato del filtro
            notifyDataSetChanged();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            ArrayList filteredArrList = new ArrayList();

            if (mOriginalValues == null) {
                mOriginalValues = new ArrayList(scoreList); //Salva i valori iniziali
            }

            if (constraint == null || constraint.length() == 0) {

                //Nessun filtro. Uso il valore iniziale
                results.count = mOriginalValues.size();
                results.values = mOriginalValues;
            } else {
                //Filtra i valori
                constraint = constraint.toString().toLowerCase();
                for (int i = 0; i < mOriginalValues.size(); i++) {
                    String data = mOriginalValues.get(i);
                    //L'istruzione che segue decide cosa prendere e cosa no
                    if (data.toString().toLowerCase().startsWith(constraint.toString())) {
                        filteredArrList.add(data);
                    }
                }
                //Preparo il risultato da restituire
                results.count = filteredArrList.size();
                results.values = filteredArrList;
            }
            return results;
        }
    };

    @Override
    public Filter getFilter() {
        return filter;
    }
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Csv e visualizzazione di una determinata riga
« Risposta #9 il: 28 Aprile 2017, 18:25:56 CEST »
0
Codice (Java): [Seleziona]
                       String data = mOriginalValues.get(i);
           
mi da rosso.. come sostituisco?
     String data = (String) mOriginalValues.get(i); cosi.. nemmeno funziona.. l'app si chiude

errore
Codice (Java): [Seleziona]
 java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
                                                                                       at Csv_array.getCount(Csv_array.java:86)
Codice (Java): [Seleziona]
 @Override
    public int getCount() {
        return this.scoreList.size();
    }

Post unito: 28 Aprile 2017, 19:58:42 CEST
nulla da fare ancora nn capisco il problema
Codice (Java): [Seleziona]
public class Csv_array extends ArrayAdapter<String[]> {
    private List<String[]> scoreList = new ArrayList<String[]>();


    static class ItemViewHolder {
        TextView approval_number;
        TextView ragione_sociale;
        TextView comune;
    }

    public Csv_array(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }
    @Override
    public void add(String[] object) {
        scoreList.add(object);
        super.add(object);
    }

    @Override
    public int getCount() {
        return this.scoreList.size();
    }

    @Override
    public String[] getItem(int index) {
        return this.scoreList.get(index);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ItemViewHolder viewHolder;
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.csv_item, parent, false);
            viewHolder = new ItemViewHolder();
            viewHolder.approval_number = (TextView) row.findViewById(R.id.approval_number);
            viewHolder.ragione_sociale = (TextView) row.findViewById(R.id.ragione_sociale);
            viewHolder.comune = (TextView) row.findViewById(R.id.comune);
            row.setTag(viewHolder);
        } else {
            viewHolder = (ItemViewHolder)row.getTag();
        }
        String[] stat = getItem(position);
        viewHolder.approval_number.setText(stat[2]);
        viewHolder.ragione_sociale.setText(stat[3]);
       viewHolder.comune.setText(stat[5]);
        return row;

    }
    ArrayList mOriginalValues = null;

    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,FilterResults results) {

            scoreList = (ArrayList) results.values; //Il risultato del filtro
            notifyDataSetChanged();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            ArrayList filteredArrList = new ArrayList();

            if (mOriginalValues == null) {
                mOriginalValues = new ArrayList(scoreList); //Salva i valori iniziali
            }

            if (constraint == null || constraint.length() == 0) {

                //Nessun filtro. Uso il valore iniziale
                results.count = mOriginalValues.size();
                results.values = mOriginalValues;
            } else {
                //Filtra i valori
                constraint = constraint.toString().toLowerCase();
                for (int i = 0; i < mOriginalValues.size(); i++) {
                    String data = (String) mOriginalValues.get(i);
                    //L'istruzione che segue decide cosa prendere e cosa no
                    if (data.toString().toLowerCase().startsWith(constraint.toString())) {
                        filteredArrList.add(data);
                    }
                }
                //Preparo il risultato da restituire
                results.count = filteredArrList.size();
                results.values = filteredArrList;
            }
            return results;
        }
    };

    @Override
    public Filter getFilter() {
        return filter;
    }
}
Codice (Java): [Seleziona]
public class HttpHandler_result extends AppCompatActivity{
    private ListView listView;
    private Csv_array itemArrayAdapter;
    EditText cerca;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.csv);
        listView = (ListView) findViewById(R.id.listView);
        cerca = (EditText) findViewById(R.id.editText6);

        itemArrayAdapter = new Csv_array(getApplicationContext(), R.layout.csv_item);
        Parcelable state = listView.onSaveInstanceState();
        listView.setAdapter(itemArrayAdapter);
        listView.onRestoreInstanceState(state);

        InputStream inputStream = getResources().openRawResource(R.raw.stabilimenti);
        final CsvFile csvFile = new CsvFile(inputStream);
        List<String[]> scoreList = csvFile.read();

        for(String[] scoreData:scoreList ) {
            itemArrayAdapter.add(scoreData);
        }

        cerca.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                String text = cs.toString().toLowerCase(Locale.getDefault());
                itemArrayAdapter.getFilter().filter(text);
                itemArrayAdapter.notifyDataSetChanged();
                listView.setAdapter(itemArrayAdapter);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });



    }

}
Codice (Java): [Seleziona]
public class CsvFile {
    InputStream inputStream;

    public CsvFile(InputStream inputStream){
        this.inputStream = inputStream;
    }

    public List<String[]> read(){
        List<String[]> resultList = new ArrayList<String[]>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        try {
            String csvLine;
            while ((csvLine = reader.readLine()) != null) {
                String[] row = csvLine.split(",");
                resultList.add(row);
            }
        }
        catch (IOException ex) {
            throw new RuntimeException("Error in reading CSV file: "+ex);
        }
        finally {
            try {
                inputStream.close();
            }
            catch (IOException e) {
                throw new RuntimeException("Error while closing input stream: "+e);
            }
        }
        return resultList;
    }
}
« Ultima modifica: 28 Aprile 2017, 19:58:42 CEST da xixietto, Reason: Merged DoublePost »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Csv e visualizzazione di una determinata riga
« Risposta #10 il: 28 Aprile 2017, 20:00:39 CEST »
0
Errore di battitura. Deve essere:

Codice (Java): [Seleziona]
Object data = mOriginalValues.get(i);
Il NullPointerException non dovrebbe verificarsi mai. Se salta fuori di nuovo posta il codice completo dell'adapter.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Csv e visualizzazione di una determinata riga
« Risposta #11 il: 28 Aprile 2017, 20:03:58 CEST »
0
Ora l'app non si chiude.. ma quando scrivo del testo non mi trova nessun risultato.. com'è possibile ancora  :-( :-( :-(


Post unito: 28 Aprile 2017, 20:06:52 CEST
Codice (Java): [Seleziona]
public class Csv_array extends ArrayAdapter<String[]> {
    private List<String[]> scoreList = new ArrayList<String[]>();


    static class ItemViewHolder {
        TextView approval_number;
        TextView ragione_sociale;
        TextView comune;
    }

    public Csv_array(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }
    @Override
    public void add(String[] object) {
        scoreList.add(object);
        super.add(object);
    }

    @Override
    public int getCount() {
        return this.scoreList.size();
    }

    @Override
    public String[] getItem(int index) {
        return this.scoreList.get(index);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ItemViewHolder viewHolder;
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.csv_item, parent, false);
            viewHolder = new ItemViewHolder();
            viewHolder.approval_number = (TextView) row.findViewById(R.id.approval_number);
            viewHolder.ragione_sociale = (TextView) row.findViewById(R.id.ragione_sociale);
            viewHolder.comune = (TextView) row.findViewById(R.id.comune);
            row.setTag(viewHolder);
        } else {
            viewHolder = (ItemViewHolder)row.getTag();
        }
        String[] stat = getItem(position);
        viewHolder.approval_number.setText(stat[2]);
        viewHolder.ragione_sociale.setText(stat[3]);
       viewHolder.comune.setText(stat[5]);
        return row;

    }
    ArrayList mOriginalValues = null;

    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,FilterResults results) {

            scoreList = (ArrayList) results.values; //Il risultato del filtro
            notifyDataSetChanged();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            ArrayList filteredArrList = new ArrayList();

            if (mOriginalValues == null) {
                mOriginalValues = new ArrayList(scoreList); //Salva i valori iniziali
            }

            if (constraint == null || constraint.length() == 0) {

                //Nessun filtro. Uso il valore iniziale
                results.count = mOriginalValues.size();
                results.values = mOriginalValues;

            } else {
                //Filtra i valori
                constraint = constraint.toString().toLowerCase();
                for (int i = 0; i < mOriginalValues.size(); i++) {
                    Object data = mOriginalValues.get(i);
                    //L'istruzione che segue decide cosa prendere e cosa no
                    if (data.toString().toLowerCase().startsWith(constraint.toString())) {
                        filteredArrList.add(data);
                    }
                }
                //Preparo il risultato da restituire
                results.count = filteredArrList.size();
                results.values = filteredArrList;
            }
            return results;
        }
    };

    @Override
    public Filter getFilter() {
        return filter;
    }
}
« Ultima modifica: 28 Aprile 2017, 20:06:52 CEST da xixietto, Reason: Merged DoublePost »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Csv e visualizzazione di una determinata riga
« Risposta #12 il: 28 Aprile 2017, 20:10:38 CEST »
0
Perché, vedo solo ora, gli elementi dell'arraylist sono a loro volta degli array di stringhe.

Dovresti utilizzare oggetti complessi per non ricadere in questi errori.

Cambia

Codice (Java): [Seleziona]
                    Object data = mOriginalValues.get(i);
                    //L'istruzione che segue decide cosa prendere e cosa no
                    if (data.toString().toLowerCase().startsWith(constraint.toString())) {
                        filteredArrList.add(data);
                    }

in

Codice (Java): [Seleziona]
                    String[] data = (String[])mOriginalValues.get(i);
                    if (data != null) {
                        for (int j=0; j<data.length; j++) {
                            if (data[j].toLowerCase().startsWith(constraint.toString())) {
                                filteredArrList.add(data);
                                break;
                            }
                        }
                    }

E soprattutto cerca di capire il codice che ti viene suggerito invece di copiaincollarlo alla cieca
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline xixietto

Re:Csv e visualizzazione di una determinata riga
« Risposta #13 il: 28 Aprile 2017, 20:14:01 CEST »
0
chiedo scusa.. ma sinceramente mi sono perso nel codice... e non riesco a venirne a capo..
ho sostituito il codice con quello che mi hai postato.. ma solita storia.. scrivo nella editText.. ma dopo qualche secondo mi si chiude l'app
Codice (Java): [Seleziona]
public class Csv_array extends ArrayAdapter<String[]> {
    private List<String[]> scoreList = new ArrayList<String[]>();


    static class ItemViewHolder {
        TextView approval_number;
        TextView ragione_sociale;
        TextView comune;
    }

    public Csv_array(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }
    @Override
    public void add(String[] object) {
        scoreList.add(object);
        super.add(object);
    }

    @Override
    public int getCount() {
        return this.scoreList.size();
    }

    @Override
    public String[] getItem(int index) {
        return this.scoreList.get(index);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ItemViewHolder viewHolder;
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.csv_item, parent, false);
            viewHolder = new ItemViewHolder();
            viewHolder.approval_number = (TextView) row.findViewById(R.id.approval_number);
            viewHolder.ragione_sociale = (TextView) row.findViewById(R.id.ragione_sociale);
            viewHolder.comune = (TextView) row.findViewById(R.id.comune);
            row.setTag(viewHolder);
        } else {
            viewHolder = (ItemViewHolder)row.getTag();
        }
        String[] stat = getItem(position);
        viewHolder.approval_number.setText(stat[2]);
        viewHolder.ragione_sociale.setText(stat[3]);
       viewHolder.comune.setText(stat[5]);
        return row;

    }
    ArrayList mOriginalValues = null;

    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,FilterResults results) {

            scoreList = (ArrayList) results.values; //Il risultato del filtro
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            ArrayList filteredArrList = new ArrayList();

            if (mOriginalValues == null) {
                mOriginalValues = new ArrayList(scoreList); //Salva i valori iniziali
            }

            if (constraint == null || constraint.length() == 0) {

                //Nessun filtro. Uso il valore iniziale
                results.count = mOriginalValues.size();
                results.values = mOriginalValues;

            } else {
                //Filtra i valori
                constraint = constraint.toString().toLowerCase();
                for (int i = 0; i < mOriginalValues.size(); i++) {
                    String[] data = (String[])mOriginalValues.get(i);
                    if (data != null) {
                        for (int j=0; j<data.length; j++) {
                            if (data[j].toLowerCase().startsWith(constraint.toString())) {
                                filteredArrList.add(data);
                                break;
                            }
                        }
                    }
                }
                //Preparo il risultato da restituire
                results.count = filteredArrList.size();
                results.values = filteredArrList;
            }
            return results;
        }
    };

    @Override
    public Filter getFilter() {
        return filter;
    }
}
mi segnala
Codice (Java): [Seleziona]
PID: 28227
                                                                                   java.lang.IndexOutOfBoundsException: Index: 9, Size: 1
                                                                                       at java.util.ArrayList.get(ArrayList.java:411)
                                                                                       at com.fabrizio_project.meatapp_free.Csv_array.getItem(Csv_array.java:41)
                                                                                       at com.fabrizio_project.meatapp_free.Csv_array.getView(Csv_array.java:60)
Codice (Java): [Seleziona]
@Override
    public String[] getItem(int index) {
        return this.scoreList.get(index);
    }
Codice (Java): [Seleziona]
  String[] stat = getItem(position);
        viewHolder.approval_number.setText(stat[2]);
        viewHolder.ragione_sociale.setText(stat[3]);
       viewHolder.comune.setText(stat[5]);
        return row;

Post unito: 28 Aprile 2017, 20:31:01 CEST
Funziona! un'ultima domanda.. l'app a volta viene chiusa.. e non capisco il perchè come potrei risolvere in questo caso?
« Ultima modifica: 28 Aprile 2017, 20:31:01 CEST da xixietto, Reason: Merged DoublePost »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Csv e visualizzazione di una determinata riga
« Risposta #14 il: 28 Aprile 2017, 22:08:24 CEST »
0
Funziona! un'ultima domanda.. l'app a volta viene chiusa.. e non capisco il perchè come potrei risolvere in questo caso?

Dipende dall'errore... Forse ha troppi dati in memoria e viene terminata dal sistema
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.