Thursday, May 10, 2012

Tutorial Android Explicit Intent

     Pada kali ini kita akan membahas apa itu untuk Explicit Intent yang akan memanggil satu activity ke activity lainnya yang masih dalam satu project.Untuk lebih jelasnya buka eclipse dan  ikuti langkah berikut ini :

1. Buat Project Baru, isikan fieldnya seperti dibawah ini

Pada saat project pertama kali dibuat ada 3 file penting yang langsung dibuat, yaitu
  • main.xml
  • string.xml
  • BelajarExplicitIntentActivity.java
2. Kita siapkan layout untuk Activity pertama kita, edit main.xml lalu isikan dengan kode berikut
01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical"
04    android:layout_width="fill_parent"
05    android:layout_height="fill_parent"
06    >
07<TextView
08    android:layout_width="fill_parent"
09    android:layout_height="wrap_content"
10    android:text="Main Activity"
11    />
12<TextView android:text="Activity 1" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
13<EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:layout_width="match_parent">
14    <requestFocus></requestFocus>
15</EditText>
16<TextView android:text="Dari Activity 2" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
17<EditText android:layout_height="wrap_content" android:id="@+id/editTextdr2" android:layout_width="match_parent"></EditText>
18<Button android:text="Call Second Activity" android:id="@+id/btnOpen" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
19</LinearLayout>
3. Siapkan juga layout activity ke dua, buat file xml baru lalu simpan dengan nama main2.xml lalui isikan dengan kode berikut
01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical"
04    android:layout_width="fill_parent"
05    android:layout_height="fill_parent"
06    >
07<TextView
08    android:layout_width="fill_parent"
09    android:layout_height="wrap_content"
10    android:text="Second Activity"
11    />
12<TextView android:text="Dari Activity 1" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
13<EditText android:layout_height="wrap_content" android:id="@+id/editTextdr1" android:layout_width="match_parent">
14</EditText>
15<TextView android:text="Activity 2" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
16<EditText android:layout_height="wrap_content" android:id="@+id/editText2" android:layout_width="match_parent"></EditText>
17<Button android:text="Close Second Activity" android:id="@+id/btnClose" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
18</LinearLayout>
4. Sekarang masuk ke file javanya, edit File BelajarExplicitIntentActivity.java lalu isikan kode berikut
01package com.agus.explicit.intent;
02 
03import android.app.Activity;
04import android.content.Intent;
05import android.os.Bundle;
06import android.view.View;
07import android.widget.Button;
08 
09public class BelajarExplicitIntentActivity extends Activity {
10    /** Called when the activity is first created. */
11    @Override
12    public void onCreate(Bundle savedInstanceState) {
13        super.onCreate(savedInstanceState);
14        setContentView(R.layout.main);
15 
16        Button btnOpen = (Button) findViewById(R.id.btnOpen);
17        //set OnClickListener event to btnOpen
18        btnOpen.setOnClickListener(new View.OnClickListener() {
19            public void onClick(View v) {
20                callIntent();
21            }
22        });
23    }
24 
25    //method for call SecondActivity
26    public void callIntent(){
27        Intent i = new Intent(this, SecondActivity.class);
28        startActivity(i);
29    }
30}
Perhatikan kode
1Intent i = new Intent(this, SecondActivity.class);
2startActivity(i);
Kode inilah yang digunakan untuk memanggil class SecondActivity

5. Kita buat file java baru untuk Activity Kedua, simpan dengan nama SecondActivity.java lalu isikan dengan kode berikut
01package com.agus.explicit.intent;
02 
03import android.app.Activity;
04import android.os.Bundle;
05import android.view.View;
06import android.widget.Button;
07 
08public class SecondActivity extends Activity {
09    public void onCreate(Bundle savedInstanceState) {
10        super.onCreate(savedInstanceState);
11        setContentView(R.layout.main2);
12 
13        Button btnOpen = (Button) findViewById(R.id.btnClose);
14        btnOpen.setOnClickListener(new View.OnClickListener() {
15 
16            @Override
17            public void onClick(View arg0) {
18                // TODO Auto-generated method stub
19                finish(); //close activity
20            }
21        });
22    }
23}
6. Jangan lupa daftarkan Activity (SecodActivity.java) yang kita buat tadi pada Androidmanifest.xml.
Tambahkan kode
1<activity android:label="SeconActivity" android:name=".SecondActivity"></activity>
2    </application>
Sehingga isi AndroidManifes.xmlmenjadi seperti ini
01<?xml version="1.0" encoding="utf-8"?>
02<manifest xmlns:android="http://schemas.android.com/apk/res/android"
03      package="com.agus.explicit.intent"
04      android:versionCode="1"
05      android:versionName="1.0">
06    <uses-sdk android:minSdkVersion="8" />
07 
08    <application android:icon="@drawable/icon" android:label="@string/app_name">
09        <activity android:name=".BelajarExplicitIntentActivity"
10                  android:label="@string/app_name">
11            <intent-filter>
12                <action android:name="android.intent.action.MAIN" />
13                <category android:name="android.intent.category.LAUNCHER" />
14            </intent-filter>
15        </activity>
16    <activity android:label="SeconActivity" android:name=".SecondActivity"></activity>
17    </application>
18</manifest>
7. Sekarang mari kita jalankan programnya

Klik button Call Second Activity

      Klik tombol Close Second Activity akan Menutup SecondActivity dan menampilkan Activity sebelumnya
8. Kita juga bisa mengirimkan data ke Activity yang dipanggil. Untuk mengirimkan data gunakan peritnha putExtra, untuk itu pada class BelajarExplicitIntentActivity.java, pada method callIntent rubah menjadi seperti ini.
1public void callIntent(){
2        Intent i = new Intent(this, SecondActivity.class);
3        EditText text1 = (EditText) findViewById(R.id.editTextdr1);
4        String dataactivity_1 = text1.getText().toString();
5        //untuk mengirim data gunakan putExtra
6        i.putExtra("value1", dataactivity_1 );
7        startActivity(i);
8    }
9. Untuk membaca data yang dikirim dari Activity yang memanggil, pada class SecondActivity.java dalam method onCreate sesudah “setContentView(R.layout.main);” tambah kode ini
01Bundle extras = getIntent().getExtras();
02if (extras == null) {
03    return;
04}
05String value1 = extras.getString("value1");
06 
07if (value1 != null ) {
08    EditText text1 = (EditText) findViewById(R.id.editText1);
09    text1.setText(value1);
10}
10. sekarang mari kita run kembali

      Isi Inputan Activity 1 dengan “mau makan apa ?”, lalu klik button Call Second Activity

      Secara ototmatis Inputan Dari Activity 1 akan terisi sesuai dengan isian yang kita inputkan pada Activity Pemanggil.
Isi inputan Activity 2 dengan “nasi dengan ayam”, lalu klik tombol Close Second Activity

Jawaban dari Second Activity tidak terbaca oleh Activity Pemanggilnya.
11. Untuk membaca data yang dikirim dari SecondActivity pada saat Activity tersebut ditutup. Maka kita perlu menambahkan kode pada class BelajarExplicitIntentActivity.java berikut kode lengkapnya.
01package com.agus.explicit.intent;
02 
03import android.app.Activity;
04import android.content.Intent;
05import android.os.Bundle;
06import android.view.View;
07import android.widget.Button;
08import android.widget.EditText;
09 
10public class BelajarExplicitIntentActivity extends Activity {
11    private static final int REQUEST_CODE = 1;
12    /** Called when the activity is first created. */
13    @Override
14    public void onCreate(Bundle savedInstanceState) {
15        super.onCreate(savedInstanceState);
16        setContentView(R.layout.main);
17 
18        Button btnOpen = (Button) findViewById(R.id.btnOpen);
19        //set OnClickListener event to btnOpen
20        btnOpen.setOnClickListener(new View.OnClickListener() {
21            public void onClick(View v) {
22                callIntent();
23            }
24        });
25    }
26 
27    //method for call SecondActivity
28    public void callIntent(){
29        Intent i = new Intent(this, SecondActivity.class);
30        EditText text1 = (EditText) findViewById(R.id.editText1);
31        String dataactivity_1 = text1.getText().toString();
32        //untuk mengirim data gunakan putExtra
33        i.putExtra("value1", dataactivity_1 );
34        startActivityForResult(i, REQUEST_CODE);
35    }
36 
37    @Override
38    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
39        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
40            if (data.hasExtra("return_value1")) {
41                EditText text2 = (EditText) findViewById(R.id.editTextdr2);
42                text2.setText(data.getExtras().getString("return_value1"));
43            }
44        }
45    }
46}
Perhatikan code startActivityForResult(i, REQUEST_CODE);
Agar Activity pemanggil dapat menangkap data yang dikirimkan oleh activity yang dipanggil, maka kita harus menggunakan perintah startActivityForResult dan kita harus mengoveride method onActivityResult
12. Pada Class SecondActivity.java rubah isinya menjadi seperti ini.
01package com.agus.explicit.intent;
02 
03import android.app.Activity;
04import android.content.Intent;
05import android.os.Bundle;
06import android.view.View;
07import android.widget.Button;
08import android.widget.EditText;
09 
10public class SecondActivity extends Activity {
11    public void onCreate(Bundle savedInstanceState) {
12        super.onCreate(savedInstanceState);
13        setContentView(R.layout.main2);
14        Bundle extras = getIntent().getExtras();
15        if (extras == null) {
16            return;
17        }
18        String value1 = extras.getString("value1");
19 
20        if (value1 != null ) {
21            EditText text1 = (EditText) findViewById(R.id.editTextdr1);
22            text1.setText(value1);
23        }
24 
25        Button btnOpen = (Button) findViewById(R.id.btnClose);
26        btnOpen.setOnClickListener(new View.OnClickListener() {
27 
28            @Override
29            public void onClick(View arg0) {
30                // TODO Auto-generated method stub
31                finish(); //close activity
32            }
33        });
34    }
35 
36    @Override
37    public void finish() {
38        Intent data = new Intent();
39        EditText text2 = (EditText) findViewById(R.id.editText2);
40        String dataactivity_2 = text2.getText().toString();
41        data.putExtra("return_value1", dataactivity_2);
42        setResult(RESULT_OK, data);
43        super.finish();
44    }
45}
Agar dapat mengirim data ke activity pemanggil pada saat activity ini diclose maka kita perlu mengoverride method finish
13. Sekarang mari kita jalankan programnya, lakukan langkah-langkah seperti pada point 10.
Sekarang pada saat kta klik tombol Close Second Activity maka tampilannya adalah

14. Kita telah berhasil membaca data yang dikirimkan oleh Second Activity, agar lebih memahami cobalah praktekan konsep Explicit Intent ini pada aplikasi yang kita buat.
Kita sudah belajar tentang Explicit Intent, ada tugas nih buatlah aplikasi yang Activity pertamanya berisi List nama buah yang apabila diklik akan memanggil Activity ke 2 yang akan menampilkan gambar buahnya.
Semoga bermanfaat..


No comments:

Post a Comment