2013/11/21

Pantaila anitzeko App-ak - Intent-ak

Garatu nahi den App-ak interfaze edo pantaila bat baino gehiago baditu Intent-ak erabili behar dira.

Intent-a App bat osatzen duten osagai ezberdinen arteko komunikazio elementua edo objektua da. Kasu honetan helburua beste pantaila bat irekitzea denez Intent baten bitartez beste activity bati deituko zaio: lehenengoan testu bat, izen bat, idatziko da EditText kontrolean eta Ireki Button-ari klikatzerakoan 2. activity-aren interfazea zabalduko da EditText-ean sartutako testua erakutsiz. I. Ilustrazioan ikus daiteke lortu nahi dena.

I. Ilustrazioa: 2 pantailako App-a


App-ak 2 pantaila izango dituenez 2 interfaze grafiko eta 2 activity definitu beharko dira. Lehenengo pantaila honako xml artxiboak defini lezake:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <TextView
        android:id="@+id/izenarenEtiketa"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/izenarenEtiketa" />
 
    <EditText
        android:id="@+id/izenaSartzeko"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text">
    </EditText>
 
    <Button
        android:id="@+id/irekiBotoia"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ireki" />
 
</LinearLayout>

Bigarren interfaze bat eraikitzeko, II.Ilustrazioa ikusten moduan artxibo berri bat sortzeko aukerara joko dugu res>layout karpetaren gainean saguaren eskubiko botoiari emanez.

II. Ilustrazioa: Fitxategi berri bat sortzen res>layout barnean
Ondoren, III. Ilustrazioan ikusten den moduan fitxategiari izena emango zaio.
III. Ilustrazioa: fitxategiari izena ematen

Bigarren pantailak TextView bat izango du soilik:
 
<?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="vertical" >
 
    <TextView
        android:id="@+id/kaixo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />
 
</LinearLayout>

Logikari dagokionez, lehenengo pantailari dagokion activity-aren class-ea modu honetan definituko da:
 
package com.proeiktua.lehenengoproiektua;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  
  setContentView(R.layout.activity_main);
  
  
        final EditText izenaSartzeko = (EditText)findViewById(R.id.izenaSartzeko);
        final Button irekiBotoia = (Button)findViewById(R.id.irekiBotoia);
 
        
        irekiBotoia.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                  
                  Intent intent =
                          new Intent(MainActivity.this, pantaila2.class);
 
                 
                  Bundle b = new Bundle();
                  b.putString("IZENA", izenaSartzeko.getText().toString());
 
                  
                  intent.putExtras(b);
 
                 
                  startActivity(intent);
             }
        });
 }
}

onClick metodoaren barnean Intent objektu bat definitzen da, egin nahi den jauzia definituz, hau da, MainActivity.java-tik pantaila2.java fitxategira egingo den jauzia (orain ez da pantaila2.java definitu!). Jauzi horretan EditText-ean sartutako testua, izena, eraman behar denez Bundle objektu bat definitzen da, eta ondoren EditText-ean dagoen testua atxikitzen zaio. intent.putExtras(b)-ekin Bundle-a Intent-ari ezartzen zaio (IZENA etiketa jartzen zaio identifikatibo moduan) eta azkenik startActivity-rekin 2. pantailari, edo hobe esan, 2. activity-ri deitzen zaio.

2. pantaila definitzeko java fitxategi berri bat definitu beharko da src karpetako namespace-aren barnean lehndik egin denaren antzera (Ikus IV. eta V. Ilustrazioak).
IV. Ilustrazioa: java fitxategi bat sortzen

V. Ilustrazioa: 2. pantaila bistaratuko duen activity-aren class-eari izena ematen
2. activity honek itxura hau izango du:
 
package com.proeiktua.lehenengoproiektua;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;



public class pantaila2 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pantaila2);
 
        
             TextView txtSaludo = (TextView)findViewById(R.id.kaixo);
 
             
             Bundle bundle = this.getIntent().getExtras();
 
             
             txtSaludo.setText("Kaixo " + bundle.getString("IZENA"));
    }
}

setContentView-arekin 2. pantaila bistaratu ondoren, eta TextView-a instanziatu eta gero, Bundle objektu batean activity-a hasieratu duen Intent-ak zekarren Bundle-eko "Extra" elementuak berreskuratzen ditugu (kasu honetan IZENA etiketarekin identifikatuko direnak). Azkenik setText-ekin TextView-ra pasako da erakutsi nahi dugun testua.