Clase Android 1

Anuncio
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.
Descargar