Autore Topic: ListView visualizzare elementi  (Letto 1857 volte)

Offline xixietto

ListView visualizzare elementi
« il: 30 Settembre 2015, 16:28:44 CEST »
0
non riesco a capire come caricare la mia listView.. ho due textview e i dati vengono prelevati dal db sqlite tramite delle select

posto il codice:
1)creo l'activity con la listview
Codice (Java): [Seleziona]
<ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
  />

2)creo activity che contiene le righe(2 textview) per la listview
Codice (Java): [Seleziona]
<TextView
        android:id="@+id/textViewList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textViewnum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
      />
3)Main
Codice (Java): [Seleziona]
private DbHelper helper =new DbHelper(this);    //  private DbHelper helper = null;   //  helper= new DbHelper(this);
    ListView listView;
    EditText editText;
    Button button;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.salsicce);
            //per settare actionBar
            String C = "#ff8823";
            ActionBar actionBar = getActionBar();
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(C))); // impostare colore desiderato actionBar

            listView = (ListView) findViewById(R.id.listView);
            listView.setFastScrollEnabled(true);
            editText = (EditText) findViewById(R.id.editText);
            button = (Button) findViewById(R.id.button);
            final SQLiteDatabase db = helper.getReadableDatabase();//sola lettura x fare query
            Intent intent = getIntent(); // l'intent di questa activity


            String Salsiccia = getPackageName(); //prendere stringa passata
            final String id_figlio = intent.getStringExtra(Salsiccia + ".myIn");


            //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<>();

            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");

        }



    }



il risultato:
Ottenere nella listview nella prima textview il risultato di questa query
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<>();

            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);
            }

nella seconda il risultato di quest'altra query
Codice (Java): [Seleziona]
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();


                    }

Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:ListView visualizzare elementi
« Risposta #1 il: 01 Ottobre 2015, 17:02:25 CEST »
0
Ciao per riempire una ListView devi usare un Adapter e passarlo alla lista in questo modo:
listView.setAdapter(customAdapter);

Offline xixietto

Re:ListView visualizzare elementi
« Risposta #2 il: 01 Ottobre 2015, 18:08:34 CEST »
0
Devo inserire piu adaptor nella listview. Ho due textview

Fabrizio


Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:ListView visualizzare elementi
« Risposta #3 il: 01 Ottobre 2015, 19:01:36 CEST »
0
No. Ad una listview associ un solo adapter e poi riempi l'adapter con le variabili che ti servono per le due textView.
Dipende cosa devi mettere nel singolo item della listview perchè forse potrebbe esserti utile creare un adapter custom.


Offline xixietto

Re:ListView visualizzare elementi
« Risposta #4 il: 01 Ottobre 2015, 19:05:01 CEST »
0
Come si crea un adapter custom? Devo visualizzare nella listview due textview con la prima il valore di una query x e l altra con il valore di una query y

Fabrizio


Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:ListView visualizzare elementi
« Risposta #5 il: 01 Ottobre 2015, 19:22:23 CEST »
0
più o meno una cosa del genere:

Codice (Java): [Seleziona]
class CustomAdapter extends BaseAdapter {

 private List<String> list;
        private Context context;
        private int layoutResourceId;

        public NetworkAdapter(Context context, int layoutResourceId, List<String> list) {
            this.context = context;
            this.layoutResourceId = layoutResourceId;
            this.list = list;

            this.x = x;
            this.y = y;
        }

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
            final CustomHolder holder;

            if(row == null)
            {
                LayoutInflater inflater = ((Activity)context).getLayoutInflater();
                row = inflater.inflate(layoutResourceId, parent, false);

                holder = new CustomHolder();
                holder.textViewX= (TextView)row.findViewById(R.id.textViewX);
                holder.textViewY= (TextView)row.findViewById(R.id.textViewY);
               
                row.setTag(holder);
            }
            else
                holder = (CustomHolder)row.getTag();

            //devi recuperare dalla lista che ti passi nel costruttore le informazioni che ti serviranno per riempire le textview

            holder.textViewX.setText(...);
            holder.textViewY.setText(...);
         
            return row;
        }



class CustomHolder {    
            TextView textViewX;
            TextView textViewY;
        }
}

Offline xixietto

Re:ListView visualizzare elementi
« Risposta #6 il: 01 Ottobre 2015, 19:46:01 CEST »
0
E come prendo i valori nel main  e inserirli nel custom adapter? Scusa le richieste

Fabrizio


Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:ListView visualizzare elementi
« Risposta #7 il: 01 Ottobre 2015, 20:18:50 CEST »
0
Figurati. Allora tu avrai un .xml con le due textView quindi chiamerai il costruttore del tuo customAdapter per esempio nella onCreate della tua Activity dove è presente la listView in questo modo:

CustomAdapter myAdapter = new CustomAdapter (this, R.layout.<.xml con le due textView>, List<String>);
listView.setAdapter(myAdapter);

Spero di riuscire a farmi capire.

Offline xixietto

Re:ListView visualizzare elementi
« Risposta #8 il: 01 Ottobre 2015, 21:22:20 CEST »
0
Si... Domani provo e ti fccio sapere :)

Fabrizio


Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:ListView visualizzare elementi
« Risposta #9 il: 01 Ottobre 2015, 21:33:15 CEST »
0
Ok buon lavoro  :D

Offline xixietto

Re:ListView visualizzare elementi
« Risposta #10 il: 04 Ottobre 2015, 09:10:37 CEST »
0
il mio passaggio si sviluppa con delle arraylist
il problema è che non visualizzo nulla nella listview
posto il codice:
1) pagina1.xml (inserisco listview)
Codice (Java): [Seleziona]
........
<ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_below="@+id/editText" />
...

2)Main
Codice (Java): [Seleziona]
public class Salsicce extends Activity {
    private DbHelper helper =new DbHelper(this);    //  private DbHelper helper = null;   //  helper= new DbHelper(this);
    ListView listView;
    EditText editText;
    Button button;
    String[] sottoTesti;
    Adapter_list adapter_list;

        [MENTION=567222]Override[/MENTION]
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.salsicce);
         
            listView = (ListView) findViewById(R.id.listView);
            listView.setFastScrollEnabled(true);


            editText = (EditText) findViewById(R.id.editText);
            button = (Button) findViewById(R.id.button);


            final SQLiteDatabase db = helper.getReadableDatabase();//sola lettura x fare query
            Intent intent = getIntent(); // l'intent di questa activity


            String Salsiccia = getPackageName(); //prendere stringa passata
            final String id_figlio = intent.getStringExtra(Salsiccia + ".myIn");



            listView.setFastScrollEnabled(true);


                                        //nome ingrediente per salsiccia
            Cursor c = db.rawQuery("SELECT idingredienti FROM unioneingredienti WHERE idfiglio=?", new String[]{id_figlio});
            ArrayList<String> listp = new ArrayList<>();
            while(c.moveToNext()) {
                Cursor r = db.rawQuery("SELECT nome FROM ingredienti WHERE _id=?", new String[]{c.getString(0)});
                r.moveToNext();
                    listp.add(r.getString(0));
                }


            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
    sottoTesti = new String[] {"Sub", "Sub"};
            adapter_list = new Adapter_list(this, listp, sottoTesti);
            listView.setAdapter(adapter_list);

        }



    }


3)adapter
Codice (Java): [Seleziona]
public class Adapter_list extends ArrayAdapter<String> {
    ArrayList<String> listp;
    String[] sottoTesto;
    Context context;
    Holder holder;

    public Adapter_list(Context context, ArrayList<String> listp, String[] sottoTesto) {
        super(context, R.layout.row_salsicce);
        // TODO Auto-generated constructor stub
        this.listp = listp;
        this.sottoTesto = sottoTesto;
        this.context = context;
    }

    public View getView(int position, View view, ViewGroup parent) {
        if(view == null) {
            holder = new Holder();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.row_salsicce, null, true);
            holder.textView = (TextView)view.findViewById(R.id.textViewList);
            holder.textView2 = (TextView)view.findViewById(R.id.textViewnum);
            holder.textView.setText(listp.get(position));
            holder.textView2.setText(sottoTesto[position]);
            view.setTag(holder);
        }
        else {
            holder = (Holder)view.getTag();
        }
        return view;
    }


}

class Holder {
    TextView textView, textView2;
}

ho sbagliato a scrivere l'adapter?

4)riga con due textview
Codice (Java): [Seleziona]
<TextView
        android:id="@+id/textViewList"
        android:background="@drawable/color_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android[emoji14]addingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:textSize="18sp"
        android:hint="nome_ingrediente"
        android:textStyle="bold"
        android:textColor="#ffffff"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:id="@+id/textViewnum"
        android:background="@drawable/color_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android[emoji14]addingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:textSize="18sp"
        android:hint="numero"
        android:textStyle="bold"
        android:textColor="#ffffff"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/textViewList"
        android:layout_alignParentStart="false" />
« Ultima modifica: 04 Ottobre 2015, 17:46:55 CEST da xixietto »

Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:ListView visualizzare elementi
« Risposta #11 il: 04 Ottobre 2015, 17:37:26 CEST »
0
Ciao,
allora due cose, la prima è:
il tuo String array sottoTesti che poi passi all'adapter ha due elementi "Sub" giusto?
la seconda è che a l tuo adapter manca qualcosa.

Ci dò un'occhiata meglio e ti dico

Offline xixietto

Re:ListView visualizzare elementi
« Risposta #12 il: 04 Ottobre 2015, 17:42:05 CEST »
0
Ciao,
Diciamo che "sottoTesti l'ho tralasciato momentaneamente.. XK dopo lo dovrei sostituire con un arraylist che prende i valori da una query

Fabrizio


Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:ListView visualizzare elementi
« Risposta #13 il: 04 Ottobre 2015, 19:12:48 CEST »
0
Le due liste che devi passare all'adapter sono un String[] e un ArrayList<String> ?

Offline xixietto

Re:ListView visualizzare elementi
« Risposta #14 il: 04 Ottobre 2015, 19:13:42 CEST »
0
Si si.. Nn capisco dov'è il problema

Fabrizio