Autore Topic: Problema con gli oggetti nella listview  (Letto 547 volte)

Offline CarloAndroid

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 5
  • Sistema operativo:
    windows 8 e ubuntu 14.04 LTS
Problema con gli oggetti nella listview
« il: 30 Agosto 2015, 20:32:02 CEST »
0
ciao,
ho un problema con una listview.
quando aggiungo un'oggetto alla listview al posto che un stringa visualizzo l'indirizzo di memoria dell'oggetto!!!
allego file java
Codice (Java): [Seleziona]
package com.example.carlo.listadellaspesa;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintWriter;
import java.nio.Buffer;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Objects;
import java.util.Objects.*;


public class ListaSpesaActivity extends Activity implements AdapterView.OnItemLongClickListener {
    private EditText editNome;
    private EditText editQuantita;
    private String nome;
    private String quantita;
    public ArrayAdapter<Articolo> adapter;
    public static ArrayList<Articolo> listaArticoli = new ArrayList<Articolo>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_spesa);
        ListView lista = (ListView) this.findViewById(R.id.activity_lista_spesa_lista);
        adapter = new ArrayAdapter<Articolo>(this, android.R.layout.simple_list_item_1, listaArticoli);
        lista.setAdapter(adapter);
        lista.setOnItemLongClickListener(this);
        Context context = getApplicationContext();
        String text = "SUGGERIMENTO: per eliminare un articolo dalla lista tocca e tieni premuto su di esso.";
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
        carica();
    }









    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_lista_spesa, menu);
        return super.onCreateOptionsMenu(menu);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
       if (id == R.id.action_lista_spesa_aggiungi) {
            dialogoaggiungi();
        }


        if (id == R.id.action_lista_spesa_cancella_tutto) {
            listaArticoli.clear();
            adapter.notifyDataSetChanged();
            salva();
            return true;
        }
        if (id == R.id.action_lista_spesa_salva) {
            salva();
            return true;
        }
        if (id == R.id.action_lista_spesa_carica) {
            listaArticoli.clear();
            carica();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public void dialogoaggiungi(){
        final Dialog dialogo=new Dialog(this);
        dialogo.setTitle("Aggiungi Articolo");
        dialogo.setCancelable(true);
        dialogo.setContentView(R.layout.dialog);
        editNome=(EditText)dialogo.findViewById(R.id.dialog_nome);
        editQuantita=(EditText)dialogo.findViewById(R.id.dialog_quantita);
        dialogo.show();
        Button bottoneAggiungi=(Button)dialogo.findViewById(R.id.dialog_aggiungi);
        bottoneAggiungi.setOnClickListener(new View.OnClickListener() {


            public void onClick(View view) {
                aggiungiarticolo();
                dialogo.dismiss();

                }} );       }


    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        listaArticoli.remove(position);
        adapter.notifyDataSetChanged();
        salva();
        return true;
    }

    public void aggiungiarticolo(){
        Articolo nuovoArticolo = new Articolo();
        nome = editNome.getText().toString();
        quantita = editQuantita.getText().toString();
        nuovoArticolo.nome = nome;
        nuovoArticolo.quantita = quantita;
        this.listaArticoli.add(nuovoArticolo);
        adapter.notifyDataSetChanged();
        salva();
    }

    public void carica() {
        File file = new File(this.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), "ListaSpesa.txt");
        try {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String temp = reader.readLine();
            while (temp != null) {
                String[] vettore = temp.split("\t");
                Articolo articolo = new Articolo();
                listaArticoli.clear();
                articolo.nome = vettore[0];
                articolo.quantita = vettore[1];
                listaArticoli.add(articolo);
                temp = reader.readLine();
            }
        } catch (Exception e) {
        }
        adapter.notifyDataSetChanged();
    }

            public void cliccaAggiungiHome(View view) {
                dialogoaggiungi();
            }

            public void salva() {
                File file = new File(this.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), "ListaSpesa.txt");
                PrintWriter scrittore = null;
                try {
                    scrittore = new PrintWriter(new FileOutputStream(file));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                for (Articolo articolo : listaArticoli) {
                    assert scrittore != null;
                    scrittore.println(articolo.nome + "\t" + articolo.quantita);
                }
                assert scrittore != null;
                scrittore.close();
            }

}
grazie in anticipo...
saluti.

Offline alx.romano89

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Ace 3
  • Sistema operativo:
    OS X 10.10
Re:Problema con gli oggetti nella listview
« Risposta #1 il: 30 Agosto 2015, 22:29:33 CEST »
0
Prova a controllare i dati relativi all'oggetto Articolo, prima che venga aggiunto a listaArticoli, ad esempio con

Codice: [Seleziona]
Log.d( "aggiungiArticolo", nuovoArticolo.nome);

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Problema con gli oggetti nella listview
« Risposta #2 il: 30 Agosto 2015, 22:32:21 CEST »
0
A me sembra normale. Devi avere una tua classe che estende ArrayAdapter.  Inoltre è nornale avere .clear() dentro un ciclo?

Offline CarloAndroid

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 5
  • Sistema operativo:
    windows 8 e ubuntu 14.04 LTS
Re:Problema con gli oggetti nella listview
« Risposta #3 il: 30 Agosto 2015, 23:10:59 CEST »
0
rispondo ad alx.romano89
ho fatto quello che mi haio detto sia per il nome che per la quantità e questo è il pezzo di logcat:
Codice: [Seleziona]
08-30 23:07:05.670  23918-23918/? D/aggiungiArticolo﹕ carlojebcooebwkdodbwjwodjfjdjeoxjdjsnwbwjsicicdjvdvebexjjcidkswnbsndjdkskwjdkkccoocoskwhjf
08-30 23:07:05.670  23918-23918/? D/aggiungiArticolo﹕ 5jejdbsjswkkxocifjebewbbdjdkcocodsosn
è esattamente quello che ho scritto...
questo mi porta a pensare che il problema sia nel passaggio dell'oggetto, nell' adapter!
ma non sono per niente esperto quindi non capisco dov'è il problema...

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Problema con gli oggetti nella listview
« Risposta #4 il: 31 Agosto 2015, 13:42:39 CEST »
0
Ciao non mi sembra che listaArticoli venga mai caricata ... E comunque giusto per avere il quadro completo ... Posta La classe Articolo.java

Offline CarloAndroid

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 5
  • Sistema operativo:
    windows 8 e ubuntu 14.04 LTS
Re:Problema con gli oggetti nella listview
« Risposta #5 il: 31 Agosto 2015, 13:51:49 CEST »
0
Non preoccuparti...
Ho risolto...
Il problema era nella classe articolo.java dove non avevo creato il metodo toString che mi restituiva una stringa con la quantita e il nome dell'articolo!  :-P
Grazie comunque! ;-)

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Problema con gli oggetti nella listview
« Risposta #6 il: 31 Agosto 2015, 13:54:01 CEST »
0
Ottimo  ;-)