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