Jumpa lagi dengan Agus Haryanto dalam seri tutorial android. Pada tutorial sebelumnya, kita telah belajar tentang Implicit Intent, Kali ini kita akan perdalam untuk Explicit Intent yang akan memanggil satu activity ke activity lainnya yang masih dalam satu project.
Oke kita mulai saja buka eclipse, lalu ikuti langkah-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
<?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="Main Activity" /> <TextView android:text="Activity 1" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:layout_width="match_parent"> <requestFocus></requestFocus> </EditText> <TextView android:text="Dari Activity 2" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <EditText android:layout_height="wrap_content" android:id="@+id/editTextdr2" android:layout_width="match_parent"></EditText> <Button android:text="Call Second Activity" android:id="@+id/btnOpen" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> </LinearLayout>
3. Siapkan juga layout activity ke dua, buat file xml baru lalu simpan dengan nama main2.xml lalui isikan dengan kode berikut
<?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="Second Activity" /> <TextView android:text="Dari Activity 1" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <EditText android:layout_height="wrap_content" android:id="@+id/editTextdr1" android:layout_width="match_parent"> </EditText> <TextView android:text="Activity 2" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <EditText android:layout_height="wrap_content" android:id="@+id/editText2" android:layout_width="match_parent"></EditText> <Button android:text="Close Second Activity" android:id="@+id/btnClose" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> </LinearLayout>
4. Sekarang masuk ke file javanya, edit File BelajarExplicitIntentActivity.java lalu isikan kode berikut
package com.agus.explicit.intent; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class BelajarExplicitIntentActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btnOpen = (Button) findViewById(R.id.btnOpen); //set OnClickListener event to btnOpen btnOpen.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { callIntent(); } }); } //method for call SecondActivity public void callIntent(){ Intent i = new Intent(this, SecondActivity.class); startActivity(i); } }
Perhatika kode
Intent i = new Intent(this, SecondActivity.class); startActivity(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
package com.agus.explicit.intent; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class SecondActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); Button btnOpen = (Button) findViewById(R.id.btnClose); btnOpen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub finish(); //close activity } }); } }
6. Jangan lupa daftarkan Activity (SecodActivity.java) yang kita buat tadi pada Androidmanifest.xml.
Tambahkan kode
<activity android:label="SeconActivity" android:name=".SecondActivity"></activity> </application>
Sehingga isi AndroidManifes.xmlmenjadi seperti ini
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.agus.explicit.intent" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BelajarExplicitIntentActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="SeconActivity" android:name=".SecondActivity"></activity> </application> </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.
public void callIntent(){ Intent i = new Intent(this, SecondActivity.class); EditText text1 = (EditText) findViewById(R.id.editTextdr1); String dataactivity_1 = text1.getText().toString(); //untuk mengirim data gunakan putExtra i.putExtra("value1", dataactivity_1 ); startActivity(i); }
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
Bundle extras = getIntent().getExtras(); if (extras == null) { return; } String value1 = extras.getString("value1"); if (value1 != null ) { EditText text1 = (EditText) findViewById(R.id.editText1); text1.setText(value1); }
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.
package com.agus.explicit.intent; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class BelajarExplicitIntentActivity extends Activity { private static final int REQUEST_CODE = 1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btnOpen = (Button) findViewById(R.id.btnOpen); //set OnClickListener event to btnOpen btnOpen.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { callIntent(); } }); } //method for call SecondActivity public void callIntent(){ Intent i = new Intent(this, SecondActivity.class); EditText text1 = (EditText) findViewById(R.id.editText1); String dataactivity_1 = text1.getText().toString(); //untuk mengirim data gunakan putExtra i.putExtra("value1", dataactivity_1 ); startActivityForResult(i, REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { if (data.hasExtra("return_value1")) { EditText text2 = (EditText) findViewById(R.id.editTextdr2); text2.setText(data.getExtras().getString("return_value1")); } } } }
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.
package com.agus.explicit.intent; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class SecondActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); Bundle extras = getIntent().getExtras(); if (extras == null) { return; } String value1 = extras.getString("value1"); if (value1 != null ) { EditText text1 = (EditText) findViewById(R.id.editTextdr1); text1.setText(value1); } Button btnOpen = (Button) findViewById(R.id.btnClose); btnOpen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub finish(); //close activity } }); } @Override public void finish() { Intent data = new Intent(); EditText text2 = (EditText) findViewById(R.id.editText2); String dataactivity_2 = text2.getText().toString(); data.putExtra("return_value1", dataactivity_2); setResult(RESULT_OK, data); super.finish(); } }
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 pabila diklik akan memanggil Activity ke 2 yang akan menampilkan gambar buahnya.
Semoga bermanfaat
Salam Hangat
Agus Haryanto
Sumber:
http://developer.android.com
bagus tutorialnya pak. terima kasih.
bang, kalo bisa file2 yg bisa di donlot biar bisa di praktekin
makasih
bang… kalo passing image gimana? seperti tugasnya…
Bang, script main.xml dan main2.xml kok sama ya????
makasih buat tutornya yang bermanfaat..
cara buat main2.xml nya gemna ya? pas d coba buat main2.xml kenapa graphical layout nya gak ada ya?
saya ingin membuat jika menekan suatu button akan masuk ke form lain.
cara alternativ nih, dibandingkan dengan preference 😀
tutorial ini mantap pak…. ! 😀 rencana sy pengen gabung ama satu activity yg berjalan dibelakang layar (Visible mirip aplikasi virus yg ada pada komputer) sy coba coding gini pak nama_activity.setVisible(7); hasilnya error… mohon solusinya mas… ? sy rencana buat sms terjadwal yg berjalan dbelakang layar untuk tugas akhir.
Terimakaih mas..
Pertanyaan saya selama ini terjawab,hehe
Sy ingin membuat sms autoreply, dimana aplikasi akan merespon sms masuk lalu membaca database sesuai permintaan dan mengirim informasi kepada pengirim secara otomatis. Kira2 gambaran Cara kerja aplikasinya seperti gmn mas.
Mohon pencerahannya, wassalam…
maaf mungkin berbeda topik..
cara membuat tombol call sebagai widget sih bagaimana yah?
nomornya diambil dari contac yang telah dipilih….
makasih..
ni baru belajar android..
pa, saya mau tanya. gimana caranya manggil class secara acak?
misalnya saat saya clik button soal, maka class yang dipanggil bisa class matematika, bisa class inggris, dll ?
terimakasih
pak..nice share..
pak.. ada gak cara agar aplikasi di android dapat mengirim data ke database(dikomputer) tanpa hosting..
terima kasih
bang, gmn carany kita mengirim ke arduino dan dpt umpan balik melalui tulisan yg masuk k aplikasiny?
mohon djawab
bang mau nanya nih bisa ga mengabungkan dua intent ?
bagus bangeettt…. nambah pengetahuan saya gan ^_^
tapii… tugasnya itu yg emank lg saya cari skrg >.< bocoran dikit lah gan 🙁
saya maw nampilin preview gmbr dr activity pertama ke activity kedua
Trims e….banyak mas agusharyanto……
sangat membantu sekali