Autore Topic: listview dinamica con inflater  (Letto 1067 volte)

Offline thejames90

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc one
  • Sistema operativo:
    windows 7/8
listview dinamica con inflater
« il: 16 Dicembre 2013, 11:58:37 CET »
0
Buongiorno ragazzi,
ho un problema che mi assilla da parecchi giorni, devo creare in un'activity una ListView dinamica dove ogni elemento di questa lista è formato da un immagine e alcune stringhe. questo è il mio elemento ListView che fa parte che fa parte del file contatori.xml.
Codice (XML): [Seleziona]
<ListView
           android:id="@+id/lvcontatori"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content">
</ListView>

questo è il layout di ogni elemento della lista chiamato contatori_layout:
Codice (XML): [Seleziona]
<LinearLayout
       android:background="#ffffff"
       android:orientation="horizontal"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:baselineAligned="false"
       xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageView
           android:id="@+id/ivcontatore"
           android:layout_gravity="center"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@drawable/counter"
           android:contentDescription="@string/contatori_impianto" />

    <LinearLayout
           android:textColor="@color/black"
           android:orientation="vertical"
           android:layout_width="0.0dip"
           android:layout_height="fill_parent"
           android:layout_weight="1.0">

        <TextView
               android:id="@+id/tvrilevamento"
               android:textStyle="bold"
                 android:textColor="@color/black"
                 android:gravity="right"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginLeft="5.0dip"
                 android:layout_marginRight="5.0dip"
                 android:text="@string/data" />

        <TextView
               android:id="@+id/tvenel"
               android:textStyle="bold"
               android:textColor="@color/black"
               android:gravity="right"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginLeft="5.0dip"
               android:layout_marginRight="5.0dip"
               android:text="@string/enel" />

        <TextView
               android:id="@+id/tvcombustibile"
               android:textStyle="bold"
               android:textColor="@color/black"
               android:gravity="right"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginLeft="5.0dip"
               android:layout_marginRight="5.0dip"
               android:text="@string/combustibile" />

        <TextView
               android:id="@+id/tvacqua"
               android:textStyle="bold"
               android:textColor="@color/black"
               android:gravity="right"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginLeft="5.0dip"
               android:layout_marginRight="5.0dip"
               android:text="@string/acqua" />

    </LinearLayout>

    <LinearLayout android:orientation="vertical"
                 android:id="@+id/infoList"
                 android:layout_width="124.0dip"
                 android:layout_height="fill_parent">

        <TextView android:textColor="@color/black"
                 android:gravity="right"
                 android:id="@+id/dataText"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content" />

        <TextView android:textColor="@color/black"
                 android:gravity="right"
                 android:id="@+id/enelText"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content" />

        <TextView android:textColor="@color/black"
                 android:gravity="right"
                 android:id="@+id/combustibileText"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content" />

        <TextView android:textColor="@color/black"
                 android:gravity="right"
                 android:id="@+id/acquaText"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content" />

    </LinearLayout>
</LinearLayout>

La lista sarà visualizzata nell'Activity contatori.java ma l'inserimento di un elemento della lista avverrà in un'Activity diversa chiamata inserisci_contatori.java. in inserisci_contatori.java c'è un bottone che raccoglie il testo di alcune EditText e le salva in stringhe e dovrà inserire il layout del file Contatori_layout all'interno della ListView. Qui comincia il mio problema; come faccio ad accodare questo layout una volta inserito nella ListView? pensavo di utilizzare i LayoutInflater e un mio Adapter ma non riesco a risolvere.
Chi mi può aiutare? grazie mille in anticipo

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:listview dinamica con inflater
« Risposta #1 il: 16 Dicembre 2013, 11:59:57 CET »
0
Posta l'adapter.

Offline thejames90

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc one
  • Sistema operativo:
    windows 7/8
Re:listview dinamica con inflater
« Risposta #2 il: 16 Dicembre 2013, 12:46:25 CET »
0
Posta l'adapter.
ecco il mio adapter:
Codice (Java): [Seleziona]
package com.example.MicroServiceMobile;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class AdattatoreContatore extends ArrayAdapter<Contatore> {

    private Context context;
    private int layoutResourceId;
    private Contatore data[] = null;

    public AdattatoreContatore(Context context, int layoutResourceId, Contatore[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;         // sarà la nostra riga del contatore
        ContatoreHolder holder = null;

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

            holder = new ContatoreHolder();
            holder.imgIcon = (ImageView)row.findViewById(R.id.ivcontatore);
            holder.tvrilevamento = (TextView)row.findViewById(R.id.dataText);
            holder.tvenel = (TextView)row.findViewById(R.id.enelText);
            holder.tvcombustibile = (TextView)row.findViewById(R.id.combustibileText);
            holder.tvacqua = (TextView)row.findViewById(R.id.acquaText);

            row.setTag(holder);
        }
        else
        {
            holder = (ContatoreHolder)row.getTag();
        }

        Contatore contatore = data[position];
        holder.tvrilevamento.setText(contatore.rilevamento);
        holder.tvenel.setText(contatore.enel);
        holder.tvcombustibile.setText(contatore.combustibile);
        holder.tvacqua.setText(contatore.acqua);
        holder.imgIcon.setImageResource(contatore.icon);

        return row;
    }

    static class ContatoreHolder
    {
        ImageView imgIcon;
        TextView tvrilevamento;
        TextView tvenel;
        TextView tvcombustibile;
        TextView tvacqua;
    }
}

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:listview dinamica con inflater
« Risposta #3 il: 16 Dicembre 2013, 15:25:22 CET »
0
L'Adapter mi sembra corretto.
Che cosa in concreto non riusciresti a fare?

Offline thejames90

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc one
  • Sistema operativo:
    windows 7/8
Re:listview dinamica con inflater
« Risposta #4 il: 16 Dicembre 2013, 16:07:52 CET »
0
L'Adapter mi sembra corretto.
Che cosa in concreto non riusciresti a fare?
Il mio problema sta nell'usare questo adpater nell'activity contatori.java, in quanto devo inserire l'inflater nell'activity inserisci_contatori.java nel metodo onClick del bottone; posto il codice dell'onClick:
Codice (Java): [Seleziona]
 btnaggcontatori.setOnClickListener(new View.OnClickListener(){             //bottone per aggiungere contatori
            public void onClick(View arg0) {

                Calendar date = Calendar.getInstance();
                SimpleDateFormat formatta = new SimpleDateFormat("dd-MM-yyyy");
                String data = formatta.format(date.getTime());

                valore_enel_text=valore_enel.getText().toString();
                valore_combustibile_text=valore_combustibile.getText().toString();
                valore_acqua_text=valore_acqua.getText().toString();

                int selected=tipologia.getCheckedRadioButtonId();
                radiobottone=(RadioButton)findViewById(selected);
                radio_text=radiobottone.getText().toString();
                Contatore contatore=new Contatore(R.drawable.counter, data, valore_enel_text, valore_combustibile_text,valore_acqua_text);
                Contatore[] arrayc=new Contatore[] {contatore};


                finish();
            }

        });

Quindi il mio problema sta nel utilizzare l'adapter e l'array "arrayc" nell'activity contatori.java. Ho pensato di utilizzare un metodo statico ma non posso utilizzare Contatori.this per creare l'adapter perchè è un metodo statico. posto il metodo:
Codice (Java): [Seleziona]
public static void setArrayc(Contatore[] arr){

        arrayc=arr;

        AdattatoreContatore adapter = new AdattatoreContatore(Contatori.this,
                R.layout.contatore_layout, arrayc);
}