====== Usare il widget ListView di Android ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//21/12/2017 - 10:11//** \\ \\ In questo esempio vedremo come cominciare ad usare il widget [[https://developer.android.com/guide/topics/ui/layout/listview.html|ListView]]. \\ \\ {{:programmazione:android:listview-android.png?200|}} ===== Codice ===== **MainActivity.java** package com.fml.fabio.testgui; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { ListView myList; //Visualizza un semplice toast protected void toast(String msg) { //Toast "Touch the cat" Context context = getApplicationContext(); CharSequence text = (CharSequence) msg; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.setGravity(Gravity.CENTER|Gravity.CENTER, 20, 140); toast.show(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Prendo il "puntatore" al Listview myList = findViewById(R.id.myList); //Un array di stringhe String[] elementi = new String[] { "Elemento1", "Elemento2", "Elemento3" }; // definisco un array final ArrayList lista = new ArrayList(); for (int i = 0; i < elementi.length; ++i) { lista.add(elementi[i]); } //Creo un semplice adattatore di riga a singola colonna (android.R.layout.simple_list_item_1) final ArrayAdapter adapter = new ArrayAdapter (this,android.R.layout.simple_list_item_1, lista); //Collego il widget all'adattatore myList.setAdapter(adapter); //Al click sulla riga myList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adattatore, final View componente, int pos, long id){ final String etichetta = (String) adattatore.getItemAtPosition(pos); toast(etichetta); } }); } } ===== Gui ===== **activity_main.xml** ====== Aggiungere immagini ====== Se volessimo aggiungere delle immagini alla nostra listview abbiamo bisogno di: - Creare un layout (file xml da mettere nella cartella layout ) per la riga con i campi : Imageview, TextView , Textview (una taxtview per il titolo l'altra per il sottotitolo) - **file_list_model.xml** - Creare un nostro arrayAdapter personalizzato (file xml da mettere nella cartella dei sorgenti dell'app) - **CustomListAdapter.java** - Implementare un metodo della nostra activity che si possa occupare di aggiornare il listview **updateFileView()** ; **file_list_model.xml** **CustomListAdapter.java** //... import android.app.Activity; import android.graphics.Bitmap; 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 CustomListAdapter extends ArrayAdapter { private final Activity context; private final String[] files; private final Integer[] icons; public CustomListAdapter(Activity context, String[] files, Integer[] icons) { super(context, R.layout.file_list_model, files); this.context=context; this.files=files; this.icons=icons; } public View getView(int position, View view, ViewGroup parent) { LayoutInflater inflater=context.getLayoutInflater(); View rowView=inflater.inflate(R.layout.file_list_model, null,true); TextView txtTitle = (TextView) rowView.findViewById(R.id.item); ImageView imageView = (ImageView) rowView.findViewById(R.id.iconRowFile); TextView extratxt = (TextView) rowView.findViewById(R.id.descrRowFile); txtTitle.setText(files[position]); imageView.setImageResource(icons[position]); extratxt.setText("Descrizione "+files[position]); return rowView; }; } **updateFileView()** public void updateFileView() { ListView list; final String[] files ={ "Documenti", "Downloads", "Desktop", "Musica", "folder0", "Folder1", "Folder2", "folder3", "folder4", "folder5", "folder6", "folder7" }; Integer[] imgicons= { R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px, R.drawable.folder_green_50px }; CustomListAdapter adapter=new CustomListAdapter(this, files, imgicons); listViewFiles.setAdapter(adapter); listViewFiles.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listViewFiles.setItemsCanFocus(false); //Callback at click listViewFiles.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { String Slecteditem= files[+position]; Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show(); } }); } Da qualche parte ricavare il riferimento al widget listview ListView listViewFiles; listViewFiles = findViewById(R.id.listViewFiles);