Barra laterale

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:

  1. 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
  2. Creare un nostro arrayAdapter personalizzato (file xml da mettere nella cartella dei sorgenti dell'app) - CustomListAdapter.java
  3. 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: 18/04/2018 - 15:48 (modifica esterna)