Liste con Android (seconda parte)

Questo articolo è la seconda parte dell’articolo sulle liste che trovate qui, e nel quale sono già state spiegate alcune cose riguardanti anche questa parte (il file AndroidManifest.xml si trova lì).
Qui, rispetto all’articolo precedente, svilupperemo una seconda activity (accessibile dalla prima) che contiene una lista fatta da item contenenti due oggetti (una stringa e un numero intero idealmente compreso tra 1 e 10) (l’effetto finale è visibile nella figura o nell’articolo precedente.


Di conseguenza ecco direttamente il codice dei file che sono:
ratedrow.xml: per la parte grafica di ogni riga della lista
rated_list.xml: per la parte grafica dell’activity della lista
inserimentodaticonvoto.xml: per il dialog
CustomAdapter.java: classe necessaria per creare l’adapter personalizzato (la spiegazione di cosa sia l’adapter si trova nel primo articolo)
citta.java: classe che rappresenta l’item
RatedList.java: codice java della lista


ratedrow.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/txtViewList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="22dip"
        android:textColor="@color/colore1"
        android:layout_weight="0.5"
        android:gravity="left"
        />

    <TextView
        android:id="@+id/txtViewNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="@dimen/sizetesto"
        android:textColor="@color/colore2"
        android:layout_weight="0.5"
        android:gravity="right"
        android:layout_marginRight="@dimen/marginedestro"
        />
</LinearLayout>

su^

rated_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/coloresfondo"
    android:padding="10dip">
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:orientation="horizontal"
    >
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnViewTuristList"
        android:text="LISTA TURISTI"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnAdd"
        android:text="Aggiungi città"
        android:layout_marginStart="@dimen/marginesinistro"
        android:layout_marginLeft="@dimen/marginesinistro"
        />

</LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nome"
        android:textSize="@dimen/sizetesto"
        android:textColor="@color/coloretitolo"
        android:layout_weight="0.5"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Voto"
        android:textSize="@dimen/sizetesto"
        android:layout_weight="0.5"
        android:textColor="@color/coloretitolo"
        android:gravity="end"
        android:layout_marginEnd="@dimen/marginedestro"
        android:layout_marginRight="@dimen/marginedestro"
        />
    </LinearLayout>
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <ListView
                android:id="@+id/list"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >
            </ListView>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

su^

inserimentodaticonvoto.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edtCitta"
        android:hint="inserisci città"
        />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edtVoto"
        android:hint="inserisci voto (da 1 a 10)"
        />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SALVA"
        android:id="@+id/btnSave"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ANNULLA"
        android:id="@+id/btnCancel"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ELIMINA"
        android:id="@+id/btnDelete"
        />
    </LinearLayout>
</LinearLayout>

su^

CustomAdapter.java

package yasb.listapaesi;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.List;

/**
 * Created by yasb on 24/04/15.
 */
public class CustomAdapter extends ArrayAdapter<citta> {

    public CustomAdapter(Context context, int textViewResourceId,
                         List<citta> objects) {
        super(context, textViewResourceId, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.ratedrow, null);
        TextView nome = (TextView)convertView.findViewById(R.id.txtViewList);
        TextView numero = (TextView)convertView.findViewById(R.id.txtViewNumber);
        citta c = getItem(position);
        nome.setText(c.getNome());
        numero.setText(String.valueOf(c.getVoto()));
        return convertView;
    }
}

su^

citta.java

package yasb.listapaesi;

/**
 * Created by alex on 24/04/15.
 */
public class citta {
    private String nome;
    private int voto;
    public citta(String nome, int voto) {
        this.nome = nome;
        this.voto = voto;
    }
    //getter e setter
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public int getVoto() {
        return voto;
    }
    public void setVoto(int voto) {
        this.voto = voto;
    }
}

su^

RatedList.java

package yasb.listapaesi;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.LinkedList;
import java.util.List;

/**
 * Created by alex on 24/04/15.
 */
public class RatedList extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rated_list);
        final ListView listView = (ListView)findViewById(R.id.list);
        final List list = new LinkedList();
        list.add(new citta("New York", 7));
        list.add(new citta("Londra",6));
        list.add(new citta("Berlino", 8));
        list.add(new citta("Roma", 9));
        list.add(new citta("Nairobi", 5));

        final CustomAdapter adapter = new CustomAdapter(this, R.layout.ratedrow, list);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    final int position, long id) {
                final Dialog d = new Dialog(RatedList.this);
                d.setContentView(R.layout.inserimentodaticonvoto);
                final EditText edtCitta = (EditText) d.findViewById(R.id.edtCitta);
                final EditText edtVoto = (EditText) d.findViewById(R.id.edtVoto);
                d.setTitle("MODIFICA DATI");

                TextView e = (TextView) view.findViewById(R.id.txtViewList);
                TextView v = (TextView) view.findViewById(R.id.txtViewNumber);
                edtCitta.setText(e.getText().toString());
                edtVoto.setText(v.getText().toString());

                d.show();

                Button btnSave = (Button) d.findViewById(R.id.btnSave);
                btnSave.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //todo  far ripartire la lista
                        if (edtCitta.getText().toString().equals("") || edtVoto.getText().toString().equals(""))
                            Toast.makeText(RatedList.this,
                                    "valori mancanti", Toast.LENGTH_SHORT).show();
                        else {
                            View lv = listView.getChildAt(position);
                            TextView tn = (TextView) lv.findViewById(R.id.txtViewList);
                            TextView tv = (TextView) lv.findViewById(R.id.txtViewNumber);
                            String nuovaCitta = edtCitta.getText().toString();
                            int nuovoVoto = Integer.parseInt(edtVoto.getText().toString());
                            tn.setText(nuovaCitta);
                            tv.setText(String.valueOf(nuovoVoto));

                            d.dismiss();//chiude il dialog
                        }
                    }
                });

                Button btnCancel = (Button) d.findViewById(R.id.btnCancel);
                btnCancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        d.dismiss();
                    }
                });

                Button btnDelete = (Button) d.findViewById(R.id.btnDelete);
                btnDelete.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        list.remove(position);
                        listView.setAdapter(adapter);//ricarica la lista
                        d.dismiss();
                    }
                });
            }
        });

        Button btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final Dialog d = new Dialog(RatedList.this);
                d.setContentView(R.layout.inserimentodaticonvoto);
                final EditText edtCitta = (EditText) d.findViewById(R.id.edtCitta);
                final EditText edtVoto = (EditText) d.findViewById(R.id.edtVoto);
                final Button btnDelete = (Button) d.findViewById(R.id.btnDelete);
                btnDelete.setVisibility(View.INVISIBLE);

                d.setTitle("INSERIMENTO DATI");


                d.show();

                Button btnSave = (Button) d.findViewById(R.id.btnSave);
                btnSave.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //todo  far ripartire la lista
                        if (edtCitta.getText().toString().equals("") || edtVoto.getText().toString().equals(""))
                            Toast.makeText(RatedList.this,
                                    "valori mancanti", Toast.LENGTH_SHORT).show();
                        else {
                            String nuovaCitta = edtCitta.getText().toString();
                            int nuovoVoto = Integer.parseInt(edtVoto.getText().toString());
                            list.add(new citta(nuovaCitta, nuovoVoto));
                            adapter.notifyDataSetChanged();//aggiorna la lista
                            d.dismiss();//chiude il dialog
                        }
                    }
                });

                Button btnCancel = (Button) d.findViewById(R.id.btnCancel);
                btnCancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        d.dismiss();
                    }
                });
            }
        });

        Button btnTuristList = (Button) findViewById(R.id.btnViewTuristList);
        btnTuristList.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(i);
            }
        });
    }
}

su^


Il risultato è il seguente:

Lista con nomi di città e voto


su^