programmazione:android:usare_il_listview
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 ListView.
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<String> lista = new ArrayList<String>(); 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<String> adapter = new ArrayAdapter<String> (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
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.fml.fabio.testgui.MainActivity"> <ListView android:id="@+id/myList" android:layout_width="368dp" android:layout_height="495dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout>
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
<?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" > <ImageView android:id="@+id/iconRowFile" android:layout_width="60dp" android:layout_height="60dp" android:padding="5dp" android:src="@drawable/logo_256" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Titolo" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:padding="2dp" android:textColor="#33CC33" /> <TextView android:id="@+id/descrRowFile" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="sottotitolo" android:layout_marginLeft="10dp"/> </LinearLayout> </LinearLayout>
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<String> { 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);
programmazione/android/usare_il_listview.txt · Ultima modifica: 08/05/2025 10:02 da 127.0.0.1