Guardando l esempio nn riesco a capire come fa.. Vi potrei postare il mio pezzo d codice?
Ma dovrei creare un adapter?
Guardando l esempio nn riesco a capire come fa.. Vi potrei postare il mio pezzo d codice?
Ma dovrei creare un adapter?
Ultima modifica di Crotan; 15-06-15 alle 18:51
Per prima cosa sarebbe bene specificare che cosa vuoi fare altrimenti è difficile darti consigli mirati.
P.S. Ti ho unito i messaggi. Non farne due consecutivi, modifica il primo.
Non riesco a mettere il risultato di una query in un array per passarlo nell adapter. In pratica i risultati ottenuti da una query.. Gli vorrei visualizzare in una listview. Ogni riga della listview apre pagine differenti a seconda della riga premuta.
Posta il codice. Vediamo intanto cosa hai fatto di tuo pugno.
in caso dovreilavorare con dati presi dal database sqlite?
non riesco a capire come caricare la mia lista.. ho due textview e i dati vengono prelevati dal db sqlite
posto il codice:
1)creo l'activity con la listview
1<ListView
2android:layout_width="wrap_content"
3android:layout_height="wrap_content"
4android:id="@+id/listView"
5android:layout_below="@+id/textView"
6android:layout_alignParentStart="true"
7android:layout_alignParentBottom="true" />
2)Main_activity
x1private DbHelper helper =new DbHelper(this); // private DbHelper helper = null; // helper= new DbHelper(this);
2ListView listView;
3EditText editText;
4Button button;
5
6
7<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
8protected void onCreate(Bundle savedInstanceState) {
9super.onCreate(savedInstanceState);
10setContentView(R.layout.salsicce);
11//per settare actionBar
12String C = "#ff8823";
13ActionBar actionBar = getActionBar();
14actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(C))); // impostare colore desiderato actionBar
15
16listView = (ListView) findViewById(R.id.listView);
17listView.setFastScrollEnabled(true);
18editText = (EditText) findViewById(R.id.editText);
19button = (Button) findViewById(R.id.button);
20final SQLiteDatabase db = helper.getReadableDatabase();//sola lettura x fare query
21Intent intent = getIntent(); // l'intent di questa activity
22
23
24String Salsiccia = getPackageName(); //prendere stringa passata
25final String id_figlio = intent.getStringExtra(Salsiccia + ".myIn");
26
27
28//prendere valore edittext cn bottone
29button.setOnClickListener(new View.OnClickListener(){
30<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
31public void onClick(View arg0) {
32String Valore = editText.getText().toString();
33// verifico se è vuoto
34if ( Valore.trim().isEmpty() ) {
35// visualizzo un messaggio definito in strings.xml
36editText.setError(getText(R.string.errore));
37// attivo il controllo
38editText.requestFocus();
39
40}
41else{
42int ValoreIntero = Integer.parseInt(Valore);
43float ValoreFloat = Float.parseFloat(Valore);
44Log.d("valore edit", (Valore+" " + ValoreIntero+" " + ValoreFloat));
45
46//valore
47Cursor a = db.rawQuery("SELECT valore FROM unioneingredienti WHERE idfiglio=?", new String[]{id_figlio});
48a.moveToFirst();
49final ArrayList<Integer> list_valore = new ArrayList<Integer>();
50for (int z = 0; z < a.getCount(); z++) {
51Log.d("idpadre", String.valueOf((a.getInt(0)*ValoreIntero)));
52
53list_valore.add(a.getInt(0));
54a.moveToNext();
55
56
57}
58}}
59});
60
61
62Cursor c = db.rawQuery("SELECT idingredienti FROM unioneingredienti WHERE idfiglio=?", new String[]{id_figlio});
63c.moveToFirst();
64final ArrayList<String> listp = new ArrayList<>();
65
66for (int z = 0; z < c.getCount(); z++) {
67Cursor r = db.rawQuery("SELECT nome FROM ingredienti WHERE _id=?", new String[]{c.getString(0)});
68r.moveToFirst();
69for (int i = 0; i < r.getCount(); i++) {
70Log.d("idpadre", (r.getString(0) + c.getString(0) + r.getCount()));
71listp.add(r.getString(0));
72r.moveToNext();
73}
74c.moveToNext();
75
76final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.row_salsicce, R.id.textViewList, listp);
77listView.setAdapter(adapter);
78}
79
3)creo activity che contiene le righe(2 textview) per la listview
271<TextView
2android:id="@+id/textViewList"
3android:background="@drawable/color_list"
4android:layout_width="wrap_content"
5android:layout_height="wrap_content"
6android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
7android:textSize="18sp"
8android:hint="nome_ingrediente"
9android:textStyle="bold"
10android:textColor="#ffffff"
11android:layout_centerVertical="true"
12android:layout_alignParentLeft="true"
13android:layout_alignParentStart="true" />
14
15<TextView
16android:id="@+id/textViewnum"
17android:background="@drawable/color_list"
18android:layout_width="wrap_content"
19android:layout_height="wrap_content"
20android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
21android:textSize="18sp"
22android:hint="numero"
23android:textStyle="bold"
24android:textColor="#ffffff"
25android:layout_alignParentTop="true"
26android:layout_toEndOf="@+id/textViewList"
27android:layout_alignParentStart="false" />
4) essendo che dovrei prendere i valori dal database sqlite non ho capito come creare l'adapter
come modifico il main_activity per fare in modo di passare due textview nella listview?
come creo l'adapter?
help!!
@Fabriziocolazzo, vediamo di dare una risposta definitiva al tuo problema.
Premessa
La ListView è un componente deprecato. Al suo posto a partire dalle API di livello 21 (Lollipop) è stato introdotto il RecyclerView, di cui ti invito a leggere la documentazione ufficiale. Pertanto, sin dalla partenza stai utilizzando una metodica obsoleta e superata. Stesso discorso per la ActionBar: rimpiazzata dalla Toolbar.
Il tuo problema
Il prelevamento dei dati da un database SQLite e l'inserimento in una lista è una delle operazioni più comuni su Android. Il tuo approccio è tuttavia poco elegante: dovresti creare una classe helper che ti aiuta nella del database con metodi setter e getter. A riguardo, seppur non dettagliatamente trovi una mia guida che ti mostra come fare: https://www.androidiani.com/forum/tu...se-sqlite.html.
Per popolare un ArrayAdapter custom devi utilizzare un ArrayList con un tuo oggetto, come trovi fatto nella qui presente guida. Ti basterebbe creare una classe "Info" con dentro tutti i campi di cui necessiti.
61
2public class Info {
3public int tuoValore;
4//altri dati di cui necessiti
5}
6
E, successivamente, preferibilmente all'interno di un ciclo while e non for:
91
2ArrayList<Info> arrayList = new ArrayList<Info>();
3while(cursor.moveToNext()) {
4Info info = new Info();
5info.tuoValore = a.getInt(0);
6//altre operazioni
7arrayList.add(info);
8}
9
In questo modo non solo puoi popolare l'ArrayList in un solo ciclo (anzichè due, come hai fatto) unificando le query e gestendo diversamente il blocco di codice iterativo ma è anche una soluzione semplice, efficace e performante.
Il punto tre che hai esposto è totalmente errato: tu non stai creando un'Activity con quel layout, tu stai creando una riga (row) personalizzata della ListView che poi sarà inserita attraverso il custom adapter. Il layout con le due TextView non farà parte di una Activity ma del custom adapter. Come spiegato in questa guida farai il suo inflate nel metodo getView(). Dopo che hai creato il custom adapter e popolato l'ArrayList sarà sufficiente passare al costruttore dell'Adapter i parametri richiesti (nel tuo caso basterebbe il contesto e l'ArrayList).
Suggerimenti
Il tuo codice presenta delle soluzioni poco carine. Per una migliore comprensione del codice suggerisco di:
- Sostituisci l'ActionBar alla Toolbar
- Per impostare il colore all'ActionBar anzichè usare tre righe di codice basterebbe fare: getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#ff8823")))
- Per convenzione, in Java come in molti altri linguaggi di programmazione, il nome delle variabili andrebbe scritto in minuscolo riservando il maiuscolo solo ed esclusivamente per gli oggetti e le interfacce.
Chiedere aiuto sul forum è l'ultima spiaggia: imparare a farlo nel momento dell'effettivo bisogno è sicuramente motivo di crescita umana e professionale. Tu non hai effettuato ricerche nè superficiali nè approfondite sul web visto che l'argomento di cui chiedi aiuto è largamente documentato e discusso su siti quali StackOverflow. Inoltre, ci sono dozzine di tutorial su siti specializzati: AndroidHive, Vogella, Android Developers, giusto per citarne qualcuno. Nessuno scriverà mai del codice per te, sarai sempre tu che dovrai farlo. Possono arrivarti suggerimenti (più o meno corretti) ma alla fine il lavoro effettivo spetterà sempre a te. Utilizzare sapientemente gli strumenti d'informazione a tua disposizione, in aggiunta ad un valido supporto come il forum, ti permetterà di imparare tanto ma se non vengono supportati dalla buona volontà di apprendere e fallire non andrai da nessuna parte. Mi rendo conto che all'inizio è difficile e si tende a voler uscire il prima possibile da queste situazioni intrigate ma posso garantirti che in questo modo non imparerai alcunchè.
Avvertimenti
Con te ho dimostrato pazienza e disponibilità ma ti ho avvertito che se continui ad infrangere il Regolamento mi costringerai a prendere provvedimenti. Hai fatto cross-posting pubblicando il tuo post oltre che in questa discussione anche nell'altra a te intestata. In questa sede non è permesso l'inserimento di parole come "help", "urgente", "entrate" e via dicendo. Alla prossima scatta l'infrazione, avvisato.
Spero, almeno questa volta, di averti allargato gli orizzonti e fornito spunti di cui puoi far tesoro per le tue ricerche individuali.
Apprezzo molto la tua pazienza e comprensione... Mi scuso per gli errori fatti in questo forum.. Il problema è che ho poco tempo a disposizione per lavorare con android.. E quella poca disponibilità la vorrei sfruttare al meglio. Fin dall' inizio ho trovato android molto interessante perché sviluppando quelle piccole app, mi hanno facilitato il lavoro. E quello che sto cercando di creare in questa pagina del forum è una delle applicazioni che potrebbe aiutarmi a velocizzarmi. Spero di essermi espresso nel modo più corretto. Scusami Crotan.. Vedrò di non fare questi errori nelle mie future domande(se ne avrò bisogno)
Ultima modifica di Fabriziocolazzo; 30-09-15 alle 23:43
Crotan (30-09-15)
salve, ho seguito alla lettera il tuo tutorial..
ma il mio passaggio si sviluppa con delle arraylist
il problema è che non visualizzo nulla nella listview
posto il codice:
1) pagina1.xml (inserisco listview)
91
2........
3<ListView
4android:layout_width="wrap_content"
5android:layout_height="wrap_content"
6android:id="@+id/listView"
7android:layout_below="@+id/editText" />
8...
9
2)Main
611public class Salsicce extends Activity {
2private DbHelper helper =new DbHelper(this); // private DbHelper helper = null; // helper= new DbHelper(this);
3ListView listView;
4EditText editText;
5Button button;
6String[] sottoTesti;
7Adapter_list adapter_list;
8
9<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
10protected void onCreate(Bundle savedInstanceState) {
11super.onCreate(savedInstanceState);
12setContentView(R.layout.salsicce);
13
14listView = (ListView) findViewById(R.id.listView);
15listView.setFastScrollEnabled(true);
16
17
18editText = (EditText) findViewById(R.id.editText);
19button = (Button) findViewById(R.id.button);
20
21
22final SQLiteDatabase db = helper.getReadableDatabase();//sola lettura x fare query
23Intent intent = getIntent(); // l'intent di questa activity
24
25
26String Salsiccia = getPackageName(); //prendere stringa passata
27final String id_figlio = intent.getStringExtra(Salsiccia + ".myIn");
28
29
30
31listView.setFastScrollEnabled(true);
32
33
34//nome ingrediente per salsiccia
35Cursor c = db.rawQuery("SELECT idingredienti FROM unioneingredienti WHERE idfiglio=?", new String[]{id_figlio});
36ArrayList<String> listp = new ArrayList<>();
37while(c.moveToNext()) {
38Cursor r = db.rawQuery("SELECT nome FROM ingredienti WHERE _id=?", new String[]{c.getString(0)});
39r.moveToNext();
40listp.add(r.getString(0));
41}
42
43
44String figlio = intent.getStringExtra(Salsiccia + ".myString");
45String id_padre = intent.getStringExtra(Salsiccia + ".myInt");
46
47
48TextView tv = (TextView) findViewById(R.id.nome);
49tv.append(figlio + "\n"); //visualizziamo i dati
50
51sottoTesti = new String[] {"Sub", "Sub"};
52adapter_list = new Adapter_list(this, listp, sottoTesti);
53listView.setAdapter(adapter_list);
54
55}
56
57
58
59}
60
61
3)adapter
371public class Adapter_list extends ArrayAdapter<String> {
2ArrayList<String> listp;
3String[] sottoTesto;
4Context context;
5Holder holder;
6
7public Adapter_list(Context context, ArrayList<String> listp, String[] sottoTesto) {
8super(context, R.layout.row_salsicce);
9// TODO Auto-generated constructor stub
10this.listp = listp;
11this.sottoTesto = sottoTesto;
12this.context = context;
13}
14
15public View getView(int position, View view, ViewGroup parent) {
16if(view == null) {
17holder = new Holder();
18LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
19view = inflater.inflate(R.layout.row_salsicce, null, true);
20holder.textView = (TextView)view.findViewById(R.id.textViewList);
21holder.textView2 = (TextView)view.findViewById(R.id.textViewnum);
22holder.textView.setText(listp.get(position));
23holder.textView2.setText(sottoTesto[position]);
24view.setTag(holder);
25}
26else {
27holder = (Holder)view.getTag();
28}
29return view;
30}
31
32
33}
34
35class Holder {
36TextView textView, textView2;
37}
ho sbagliato a scrivere l'adapter?
4)riga con due textview
271<TextView
2android:id="@+id/textViewList"
3android:background="@drawable/color_list"
4android:layout_width="wrap_content"
5android:layout_height="wrap_content"
6android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
7android:textSize="18sp"
8android:hint="nome_ingrediente"
9android:textStyle="bold"
10android:textColor="#ffffff"
11android:layout_centerVertical="true"
12android:layout_alignParentLeft="true"
13android:layout_alignParentStart="true" />
14
15<TextView
16android:id="@+id/textViewnum"
17android:background="@drawable/color_list"
18android:layout_width="wrap_content"
19android:layout_height="wrap_content"
20android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
21android:textSize="18sp"
22android:hint="numero"
23android:textStyle="bold"
24android:textColor="#ffffff"
25android:layout_alignParentTop="true"
26android:layout_toEndOf="@+id/textViewList"
27android:layout_alignParentStart="false" />