Autore Topic: Due textview su adapter listview  (Letto 1223 volte)

Offline xixietto

Due textview su adapter listview
« il: 20 Settembre 2015, 18:10:45 CEST »
0
<b>salve, questo è il mio problema.. ho fatto due query le quali dovrebberò nella mia applicazione visualizzarmi i valori in due textview differenti nella listview.<br />
 
Codice (Java): [Seleziona]
 Cursor c = db.rawQuery("SELECT idingredienti FROM unioneingredienti WHERE idfiglio=?", new String[]{id_figlio});
            c.moveToFirst();
            final ArrayList<String> listp = new ArrayList<String>();

            for (int z = 0; z < c.getCount(); z++) {
                Cursor r = db.rawQuery("SELECT nome FROM ingredienti WHERE _id=?", new String[]{c.getString(0)});
                r.moveToFirst();
                for (int i = 0; i < r.getCount(); i++) {
                    Log.d("idpadre", (r.getString(0) + c.getString(0) + r.getCount()));
                    listp.add(r.getString(0));
                    r.moveToNext();
                }
                c.moveToNext();


                final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.row_salsicce, R.id.textViewList, listp);
                listView.setAdapter(adapter);
            }
             //valore
            Cursor a = db.rawQuery("SELECT valore FROM unioneingredienti WHERE idfiglio=?", new String[]{id_figlio});
            a.moveToFirst();
            final ArrayList<String> list_valore = new ArrayList<String>();
            for (int z = 0; z < a.getCount(); z++) {
                list_valore.add(a.getString(0));
                    a.moveToNext();
                }
                final ArrayAdapter<String> adaper = new ArrayAdapter<String>(this, R.layout.row_salsicce, R.id.textViewnum, list_valore);

            listView.setAdapter(adaper);
« Ultima modifica: 21 Settembre 2015, 08:40:21 CEST da xixietto »

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Due textview su adapter listview
« Risposta #1 il: 20 Settembre 2015, 19:38:32 CEST »
0
ciao posta nuovamente il codice ,  visto che non si capisce nulla

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Due textview su adapter listview
« Risposta #2 il: 20 Settembre 2015, 21:20:18 CEST »
0
Non si capisce nulla. Però vedo che crei due adapter. Questo è sbagliato in partenza. Te ne serve uno e basta

Offline xixietto

Re:Due textview su adapter listview
« Risposta #3 il: 21 Settembre 2015, 08:43:23 CEST »
0
scusate.
ho postato il codice.. in pratica devo inserire i valori presi dalle query nelle textview della relativa listview .
il problema è che quando carico il secondo adapter perchè all'avvio dell'app non mi ritrovo i valori del primoadapter caricato

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Due textview su adapter listview
« Risposta #4 il: 21 Settembre 2015, 09:47:21 CEST »
0
Ciao Come dice tonno se vuoi inserire in ogni riga della listview più elementi , che siano edittext , textview o imageview , non si utilizzano tanti adapter quanti sono gli elementi , ma uno unico Custom Adapter ,
[medio] ListView con layout personalizzato tramite un custom ArrayAdapter - Android Developers Italia

in questo topic puoi trovare questo argomento ampiamente trattato , saluti

Offline xixietto

Re:Due textview su adapter listview
« Risposta #5 il: 21 Settembre 2015, 10:15:02 CEST »
0
non ci avevo capito moltissimo riguardo quel tutorial... potresti aiutarmi a modificare gli errori che h ftt ?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Due textview su adapter listview
« Risposta #6 il: 21 Settembre 2015, 10:33:49 CEST »
0
Citazione
non ci avevo capito moltissimo riguardo quel tutorial... potresti aiutarmi a modificare gli errori che h ftt ?
+

Scusa se ti quoto. La tua frase secondo me denota una notevole non voglia di imparare. Io programmo da 2 anni su android. Ma quel tutorial l'ho linkato almeno 10 volte in 2 anni a persone e conoscenti (intendo miei amici) che si avvicinano ad android. Perhè ovviamente le listview sono le basi. Quel tutorial non è assai difficile. E non lo dico io. Lo dicono appunto i miei amici.

E se tu sei in grado di scorrere 2 cursor annidati, allora trovo impossibile che non riesci a capire il tutorial.

Nel tutorial:
- Person rappresenta un oggetto Persona. Ogni riga della listview è una persona
- la classe innestata ViewHolder rappresenta le view della riga. Nel tuo caso se vuoi avere solamente 2 textview nella tua riga, allora il viewHolder avrà solo 2 textView.
- capito il punto precedente, sistemare il metodo getView è una cavolata. Se dobbiamo dirti noi cosa fare, io allora posso consigliarti di abbandonare android.

Ultimo consiglio:

Prova a fare un oggetto Ricetta. L' oggetto ricetta contiene 2 campi: un campo di nome "nome" e un campo di nome "durata". Lascia stare i cursor.
Create una Lista di Ricetta (List<Ricetta> list = new ArrayList<>())

Aggiungi tramite codice 4 ricette. ora creati il tuo RicetteAdapter. Quando la listvew ti piacerà e sarà visualizzata bene allora passi ai cursor.
Questo te lo consiglio per 2 motivi:
- Usare un cuirsor che riempi una lista e usare una ArrayAdapter è inutile. Meglio usare un CursorAdapter (Se esiste c'è un motivo)
- Usare i cursor se non hai la certezza che le query siano giuste l'app crasherà causa nullpointer excception, oppure perchè accedi alla prima posizione di un cursor ed esso ha dimensione 0

Offline xixietto

Re:Due textview su adapter listview
« Risposta #7 il: 21 Settembre 2015, 10:56:33 CEST »
0
Scusami, ho espresso male quello che volevo dire

volevo un aiuto su come organizzarmi per gestire  la listview utilizzando questo metodo da te consigliato.. visto che mi sono organizzato cn gli arrayAdapter

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Due textview su adapter listview
« Risposta #8 il: 21 Settembre 2015, 10:58:04 CEST »
0
E ma non ha senso quello che dici.
Non devi organizzarti con gli array adapter come già detto 2 volte.
Devi usare un solo ArrayAdapter e 2 textView nel ViewHolder.


Offline xixietto

Re:Due textview su adapter listview
« Risposta #9 il: 21 Settembre 2015, 14:17:59 CEST »
0
chiedo scusa a tonno16 :-P

il tutorial è stato semplice..
ora mi manca inserire il codice nell'activity principale.. a presto!!

Post unito: 21 Settembre 2015, 14:40:15 CEST
scusate nell activity principale ho trovato dei problemi:

1) ho due query le quali mi daranno dei risultati prelevati dal database sQlite..
 come inserisco i risultati delle query nelle textview?
prima usavo un'altro metodo.. e ora nn so come funziona.. se qualcuno potrebbe aiutarmi ne sarei grado.

2) ho trovato problemi nell'impostare il 
Codice (Java): [Seleziona]
@Override
                protected Void doInBackground(Void... params) {

vi posto il mio codice:
Codice (Java): [Seleziona]
adapter_ingredienti = new Adapter_Ingredienti(this, R.layout.row_salsicce,new ArrayList<Ingredienti_salsiccia>());

            listView.setAdapter(adapter_ingredienti);

            new BackgroundWorker().execute();

            //prendere valore edittext cn bottone
            button.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View arg0) {
                    String Valore = editText.getText().toString();
                    // verifico se è vuoto
                    if ( Valore.trim().isEmpty() ) {
                        // visualizzo un messaggio definito in strings.xml
                        editText.setError(getText(R.string.errore));
                        // attivo il controllo
                        editText.requestFocus();

                    }
                    else{
                    int ValoreIntero = Integer.parseInt(Valore);
                    float ValoreFloat = Float.parseFloat(Valore);
                    Log.d("valore edit", (Valore+" " + ValoreIntero+" " + ValoreFloat));

                    //valore
                    Cursor a = db.rawQuery("SELECT valore FROM unioneingredienti WHERE idfiglio=?", new String[]{id_figlio});
                    a.moveToFirst();
                    final ArrayList<Integer> list_valore = new ArrayList<Integer>();
                    for (int z = 0; z < a.getCount(); z++) {
                        Log.d("idpadre", String.valueOf((a.getInt(0)*ValoreIntero)));
                        list_valore.add(a.getInt(0));
                        a.moveToNext();


                    }
                    }}
            });





            Cursor c = db.rawQuery("SELECT idingredienti FROM unioneingredienti WHERE idfiglio=?", new String[]{id_figlio});
            c.moveToFirst();
            final ArrayList<String> listp = new ArrayList<String>();

            for (int z = 0; z < c.getCount(); z++) {
                Cursor r = db.rawQuery("SELECT nome FROM ingredienti WHERE _id=?", new String[]{c.getString(0)});
                r.moveToFirst();
                for (int i = 0; i < r.getCount(); i++) {
                    Log.d("idpadre", (r.getString(0) + c.getString(0) + r.getCount()));
                    listp.add(r.getString(0));
                    r.moveToNext();
                }
                c.moveToNext();


                final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.row_salsicce, R.id.textViewList, listp);
                listView.setAdapter(adapter);
            }






            String figlio = intent.getStringExtra(Salsiccia + ".myString");
            String id_padre = intent.getStringExtra(Salsiccia + ".myInt");


            TextView tv = (TextView) findViewById(R.id.nome);
            tv.append(figlio + "\n"); //visualizziamo i dati
            // tv.append(id_figlio);
            //  tv.append("id del padre"+s+"\n");

        }

    private class BackgroundWorker extends AsyncTask<Void, Ingredienti_salsiccia, Void> {

        @Override
        protected void onPreExecute() {
            // Prima di iniziare a inserire gli elementi svuotiamo l'adapter
            adapter_ingredienti.clear();
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {

            // Qui dentro si possono mettere le operazioni che potrebbero
            // rallentare il caricamento della listview, come ad sempio il
            // caricamento da db degli oggetti

            Ingredienti_salsiccia[] people = {
                    new Ingredienti_salsiccia("nome",1),
                    new Ingredienti_salsiccia("nome",2),
                    new Ingredienti_salsiccia("nome",3),
                    new Ingredienti_salsiccia("nome",4), };


            for (int i = 0; i < 200; i++) {
                // Pubblichiamo il progresso
                publishProgress(people[r.nextInt(people.length)]);
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(Person... values) {
            // Aggiungiamo il progresso pubblicato all'adapter
            personAdapter.add(values[0]);
            super.onProgressUpdate(values);
        }

    }
}

    }

scusate ma non ho mai usato questo tipo di operazioni per riempire le listview
grazie per la pazienza
« Ultima modifica: 21 Settembre 2015, 14:40:15 CEST da xixietto, Reason: Merged DoublePost »