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