Computación Móvil Introducción a Android (1) Contenido ● ● ● ● ● Breve descripción de la arquitectura Android Ciclo de vida de una Activity MVC en Android Delegación de la gestión de clicks Dos aplicaciones simples ○ ClickCounter ○ OnOff Arquitectura de Android Activity Lifecycle Activity Stack Tasks Single Task Launch Mode MVC – Android Activity delegate Controller update View update Model ClickCounter ClickCounter – Model public class MyModel { private Integer value; public MyModel() { value = Integer.valueOf(0); } public Integer update() { return ++value; } } ClickCounter – View public class MyView extends View { private final Activity activity; private TextView counter; … } public MyView(Activity a) { super(a); activity = a; activity.setContentView( R.layout. activity_main); counter = (TextView) activity. findViewById(R.id. counterId); } public void update(Integer value) { counter.setText(value.toString()); } ClickCounter – Controller public class MyController implements OnClickListener { private final MyView myView; private final MyModel myModel; public MyController(MyModel m, MyView v) { myModel = m; myView = v; } public void onClick(View v) { Integer value = myModel.update(); myView.update(value); } } ClickCounter – MainActivity public class MainActivity extends Activity { private MyModel model; private MyView view; private MyController controller; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create MVC model = new MyModel(); view = new MyView(this, model); controller = new MyController(model, view); // Delegate click handling to the controller findViewById(R.id.clickId).setOnClickListener(controller); } ClickCounter – Layout <RelativeLayout xmlns:android=http://schemas.android.com/apk/res/android …> <TextView android:id="@+id/counterId” android:text=”0” … /> <Button android:id="@+id/clickId” android:layout_above="@+id/counterId” android:text=“ClickMe!” … /> </RelativeLayout> Manifest <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ar.uba.dc.gcmovil.clickcounter" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> OnOff OnOff – 1 Controller + 2 Buttons // Activity // Delegate button handling to // controller findViewById(R.id. buttonOn). setOnClickListener(controller); findViewById(R.id. buttonOff). setOnClickListener(controller); public void onClick(View v) { Boolean b; if (view.getOn() == (Button)v){ b = model.update(true); } else if (view.getOff() == (Button)v){ b = model.update(false); } view.update(b); } Ejercicio 1. ClickCounter a. Inicializar el contador desde el controlador. b. Simular un “Language Manager” y hacer que el nombre del botón dependa del idioma. 2. OnOff a. Cambiar el color del background a “Azul” con ON y a “Rojo” con OFF. b. Contar la cantidad de ON y OFF y mostrarlas, además del estado actual.