back to top

Android: Viste avanzate

Nella precedente lezione abbiamo utilizzato una serie di viste di base che possiamo utilizzare per la realizzazione delle nostre applicazioni Android. Esistono molte altre viste e adesso andremo a vederne alcune.

TimePicker

Selezionare una data e un orario รจ una delle attivitร  piรน comuni da effettuare in unโ€™applicazione mobile. Android supporta questa funzionalitร  tramite le viste TimePicker e DatePicker. Per analizzare il funzionamento della vista TimePicker creiamo un nuovo progetto Android denominato TestView2.

Pubblicitร 

Andiamo a modificare il file activity_main.xml nel modo seguente

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TimePicker android:id="@+id/timePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button android:id="@+id/btnSet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Visualizza orario"
        android:onClick="onClick" />
</LinearLayout>

Selezioniamo il progetto ed effettuiamo il debug sullโ€™emulatore.

Il risultato รจ il seguente

Possiamo cambiare lโ€™orario selezionando lโ€™ora o i minuti in alto e spostando il cerchietto rosso.

Adesso andiamo a modificare il file MainActivity.java inserendo il codice per la gestione dellโ€™evento click del button

package com.example.test.testview2;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;

public class MainActivity extends Activity {

TimePicker timePicker;
  
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
    
  timePicker = (TimePicker) findViewById(R.id.timePicker);
  timePicker.setIs24HourView(true);
}

public void onClick(View view) {
  Toast.makeText(getBaseContext(),
  "Orario:" +
  timePicker.getCurrentHour() +
  ":" + timePicker.getCurrentMinute(),
  Toast.LENGTH_SHORT).show();
}

}

Avviando nuovamente lโ€™applicazione sullโ€™emulatore e cliccando sul button verrร  in questo modo visualizzato un messaggio con lโ€™orario attualmente selezionato. Vi faccio notare che questa volta la vista mostra lโ€™orario in formato 24 ore a differenza del passaggio precedente in cui esso veniva mostrato in formato AM/PM. Questo perchรฉ nella classe java relativa alla nostra activity abbiamo utilizzato il metodo setIs24HourView. Inoltre vi faccio notare che il valore dellโ€™ora e del minuto corrente si ottengono tramite i metodi getCurrentHour e getCurrentMinute.

DatePicker

La vista DatePicker, molto simile alla TimePicker, consente di selezionare una data allโ€™interno di unโ€™activity. Andiamo a modificare il file activity_main.xml del progetto TestView2 nel modo seguente

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:ignore="HardcodedText" >

    <DatePicker android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    
    <Button
        android:id="@+id/btnSet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="Visualizza data" />

</LinearLayout>

Avviando lโ€™applicazione sullโ€™emulatore il risultato sarร  il seguente

Adesso andiamo a modificare il file MainActivity.java nel modo seguente

package com.example.test.testview2;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.Toast;

public class MainActivity extends Activity {

DatePicker datePicker;
  
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
    
  datePicker = (DatePicker) findViewById(R.id.datePicker);
  }

public void onClick(View view) {
  Toast.makeText(getBaseContext(),
    "Data:" + (datePicker.getMonth() + 1) +
    "/" + datePicker.getDayOfMonth() +
    "/" + datePicker.getYear() + "n",
    Toast.LENGTH_SHORT).show();
  }

}

Riavviando lโ€™applicazione e cliccando sul pulsante il risultato sarร  la visualizzazione della data correntemente selezionata

In questo caso i valori di giorno, mese ed anno si ottengono chiamando il metodo getDayOfMonth, getMonth e getYear.

ListView

Spesso allโ€™interno di unโ€™applicazione si presenta la necessitร  di visualizzare una lunga lista di elementi. A tale scopo Android mette a disposizione due tipi di vista, ListView e SpinnerView. La ListView permette di visualizzare una sequenza di elementi in una lista verticale scorrevole. Per analizzarne il funzionamento creiamo un nuovo progetto Android denominato TestList.

Andiamo a modificare il file MainActivity.java nel modo seguente

package com.example.test.testlist;

import android.os.Bundle;
import android.app.ListActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends ListActivity {

  String[] squadre = {
      "Juventus",
      "Milan",
      "Inter",
      "Roma",
      "Lazio",
      "Torino",
      "Sampdoria",
      "Genoa",
      "Bologna",
      "Sassuolo"};
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        
    setListAdapter(new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, squadre));
  }

  public void onListItemClick(
  ListView parent, View v, int position, long id)
  {
    Toast.makeText(this,
    "La squadra selezionata รจ: " + squadre[position],
    Toast.LENGTH_SHORT).show();
  }

}

In questo modo avviando lโ€™applicazione visualizziamo lโ€™elenco delle squadre che abbiamo definito e cliccando su una di esse viene mostrato il messaggio impostato nel metodo onListitemClick

La prima cosa da sottolineare in questo esempio รจ che la classe MainActivity estende la classe ListActivity, la quale consente di visualizzare una lista di elementi collegata ad una origine dati. Altra cosa da notare รจ che non รจ necessario modificare il file activity_main.xml per dichiarare la ListView, perchรฉ la classe ListActivity contiene essa stessa una ListView. Per tale motivo nel metodo onCreate non รจ necessario chiamare il metodo setContentView per il caricamento dellโ€™interfaccia utente tramite il file activity_main.xml.

Allโ€™interno del metodo onCreate abbiamo utilizzato il metodo setListAdapter per popolare la ListView di elementi (in questo caso nomi di squadre di calcio). Lโ€™oggetto ArrayAdapter gestisce lโ€™array di stringhe che viene poi visualizzato allโ€™interno della ListView.

Una ListView permette dunque di visualizzare una lista piรน o meno lunga di elementi ma a volte si puรฒ presentare la necessitร  di visualizzare altre viste nella stessa interfaccia utente e quindi non รจ possibile utilizzare un controllo che copra lโ€™intero schermo. In questi casi si puรฒ utilizzare la SpinnerView, una vista che consente di visualizzare un elemento alla volta di una lista e consente allโ€™utente di scegliere quale elemento visualizzare.

SpinnerView

Per capire il funzionamento di questa vista creiamo un nuovo progetto Android denominato TestSpinnerList e andiamo a modificare il file activity_main.xml nel modo seguente

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  
  <Spinner
    android:id="@+id/spinner1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawSelectorOnTop="true" />
</LinearLayout>

Andiamo a modificare il file strings.xml, posizionato nella cartella res/values, aggiungendo un elemento string-array contenente le stringhe da visualizzare successivamente nella SpinnerView

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">TestSpinnerView</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>

    <string-array name="numeri_array">
    <item>Uno</item>
    <item>Due</item>
    <item>Tre</item>
    <item>Quattro</item>
    <item>Cinque</item>
    <item>Sei</item>
    <item>Sette</item>
    <item>Otto</item>
    </string-array>
    
</resources>

Adesso andiamo a modificare il file MainActivity.java nel modo seguente

package com.example.test.testspinnerlist;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends Activity {

String[] numeri;
  
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  numeri = getResources().getStringArray(R.array.numeri_array);
    
  Spinner s1 = (Spinner) findViewById(R.id.spinner1);
    
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
  android.R.layout.simple_spinner_item, numeri);
    
  s1.setAdapter(adapter);
    
  s1.setOnItemSelectedListener(new OnItemSelectedListener()
  {
  @Override
  public void onItemSelected(AdapterView<?> arg0,
  View arg1, int arg2, long arg3)
  {
    int index = arg0.getSelectedItemPosition();
    Toast.makeText(getBaseContext(),
    "Elemento selezionato: " + numeri[index],
    Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) { }
    });
  }
}

Avviando lโ€™applicazione sullโ€™emulatore e cliccando sulla SpinnerView ci viene mostrato un elenco degli elementi contenuti al suo interno e selezionandone uno ci viene mostrato il relativo messaggio

Rispetto a quanto visto per la ListView un evento da gestire in piรน รจ onNothingSelect. Questo evento si verifica quando lโ€™utente preme il pulsante back e in questo caso non viene selezionato alcun elemento, quindi non รจ necessario intraprendere alcuna azione.

Pubblicitร 
Articolo precedente
Articolo successivo