Lezione 2 - mauriziocozzetto.net · Activity “An activity is a single, focused thing that the...

32
Corso Base Maurizio Cozzetto, Francesco Sarasini Lezione 2

Transcript of Lezione 2 - mauriziocozzetto.net · Activity “An activity is a single, focused thing that the...

Corso Base

Maurizio Cozzetto, Francesco Sarasini

Lezione 2

Elementi di base di una applicazione

● Classe HelloAndroidActivity.javaHelloAndroidActivity.java

● File gestione stringhe strings.xmlstrings.xml

● File gestione layout main.xml main.xml

● File AndroidManifest.xmlAndroidManifest.xml

● Classe R.javaR.java generata automaticam.

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Activity

“An activity is a single, focused thingsingle, focused thing that the user can do.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Classe HelloAndroidActivity

public class HelloAndroidActivity extends Activity {

@Overridepublic void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);setContentView(R.layout.main);

}...

}

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Metodo eseguitoal caricamento

strings.xml

<?xml version="1.0" encoding="utf-8"?><resources> <string name="hello">Hello World, HelloAndroidActivity!</string> <string name="app_name">Hello Android</string></resources>

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

main.xml

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

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest ... > <application ... > <activity android:name=".HelloAndroidActivity" android:icon="@drawable/icon.png" android:label="@string/app_name" <intent-filter> <action android:name="...MAIN" /> <category android:name="...LAUNCHER" /> </intent-filter> </activity> ... </application></manifest>

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Attivitàprincipale

R.javapackage it.itiscastelli.helloandroid;

public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; }}

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Ciclo di vita (1/2)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

public class MiaActivity extends Activity { protected void onCreate(Bundle savedInstanceState){

// codice precedente...}

protected void onStart(){super.onStart();...

}; protected void onRestart() {

super.onRestart();};

// continua...

Ciclo di vita (2/2)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

// continua da slide precedente...

protected void onResume() {...}

protected void onPause(){...}

protected void onStop() {...}

protected void onDestroy() {...}

}

Intent

“An intent is an abstract description of an operation to be performed.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Sotto-Attività

“The startActivitystartActivity() method is used to start a new activity, which will be placed at the top of the activity activity stackstack.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

MainActivity

SubActivity1 SubActivity2

SubActivity3

Sottoattività (1/3)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

public class MainActivity extends Activity { ... // da qualche parte nell'attività Intent intent1 = new Intent(this, SubActivity1.class); startActivity(intent1);

Intent intent2 = new Intent(this, SubActivity2.class); startActivity(intent2); ... }

Sottoattività (2/3)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

public class SubActivity1 extends Activity { // fai qualcosa con SubActivity1}

public class SubActivity2 extends Activity { // da qualche parte nella SubActivity2 Intent intent3 = new Intent(this,SubActivity3.class); startActivity(intent3);}

public class SubActivity3 extends Activity { // fai qualcosa con SubActivity3}

Sottoattività (3/3)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

<manifest ... > <application ... > <activity android:name=".MainActivity" android:icon="@drawable/icon.png" android:label="@string/app_name" <intent-filter> <action android:name="...MAIN" /> <category android:name="...LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SubActivity1".../>

<activity android:name=".SubActivity2".../><activity android:name=".SubActivity3".../>

</application></manifest>

File AndroidManifestDi MainActivity

Toast“A toast notification is a messagemessage that pops up on the surface of the window.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Toast (1/3)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Context context = getApplicationContext();CharSequence text = "Hello toast!";int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);toast.show();

Toast (2/3)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

public class MiaActivity extends Activity {...

private void toast(String text) { Context context = getApplicationContext();int duration = Toast.LENGTH_SHORT;Toast toast = Toast.makeText(context, text,

duration);toast.show();

}...

}

Toast (2/3)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

public class MiaActivity extends Activity {...// metodo alternativoprivate void toast(String text) {

Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();

}...

}

Custom Toast“If a simple text message isn't enough, you can create a customized layoutcustomized layout for your toast notification.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

View“The View class serves as the base for subclasses called 'widgetswidgets' which offer fully implemented UI objects, like text fields and buttons.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

ViewGroup“The ViewGroup class serves as the base for subclasses called 'layoutslayouts' which offer different kinds of layout architecture, like linear, tabular and relative.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Gerarchia delle View“This hierarchy tree can be as simple or complex as you need it to be, and you can build it up using Android's set of predefined widgetswidgets and layoutslayouts.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Events“When considering events within your user interface, the approach is to capture the events from the specific View objectView object that the user interacts with.”

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Eventi

● Classi iinternenterne

● Classi interne anonimeinterne anonime

● Origine e ascoltatore coincidenticoincidenti

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

main.xml

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

<TextView ... />...<Button android:text="@string/mioTesto"

android:id="@+id/mioBottone"></Button>...

</LinearLayout>

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

Eventi – Classi interne (1/2)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

protected void onCreate(Bundle savedValues) { ... Button mioBottone =

(Button)findViewById(R.id.mioBottone); MioBottoneListener mioBottoneListener = new

MioBottoneListener();

mioBottone.setOnClickListener( mioBottoneListener);

} // fine metodo onCreate

// continua...

Creazione di un oggettoascoltatore e registrazionesul pulsante

Eventi – Classi interne (2/2)

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

private class MioBottoneListener implements android.view.View.OnClickListener {

@Override public void onClick(View v) {

// fa qualcosa }

} // fine classe interna

Creazione di una classe interna

Eventi – Classi interne anonime

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

protected void onCreate(Bundle savedValues) { ... Button mioBottone =

(Button)findViewById(R.id.mioBottone);

mioBottone.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

// fai qualcosa }

});

...} // fine metodo onCreate

Creazione di un ascoltatoreanonimo, registrazionesul pulsante e definizionedel metodo di callback

Origine e Ascoltatore coincidenti

Android Corso Base. Maurizio Cozzetto, Francesco Sarasini.

public class MiaActivity extends Activity implements OnClickListener { protected void onCreate(Bundle savedValues) { ... Button mioBottone = (Button)findViewById(R.id.mioBottone); mioBottone.setOnClickListener(this); }

// Implementa OnClickListener callback public void onClick(View v) { // fai qualcosa } ...}

Corso Base

Maurizio Cozzetto, Francesco Sarasini

5 minuti di pausa