RSS

Menghubungkan 2 Activity dalam Android

01 Apr

Ok, kali ini gw bakal jelasin cara buat ngehubungin (nge-link) 2 Activity di Android. Jadi dari suatu halaman, jika di klik tombol, ia akan menuju ke halaman lain dengan membawa beberapa pesan(parameter) yang nantinya akan kita simpan dalam Intent.

Ok, learning by doing, jadi langsung aja,kita buat dulu 2 tampilan buat Activity, misal namanya “main” dan “child”

main.xml:

<?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="This is main"
	    />
	<Button
		android:id="@+id/main_btnPage"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:text="Go to Child"
	    />
</LinearLayout>

Ok, sekarang kita buat layout buat Activity yang ke-2,

child.xml

<?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:id="@+id/child_txtPage"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="This is child"
	    />
	<Button
		android:id="@+id/child_btnPage"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:text="Back to main"
	    />
</LinearLayout>

Ok, setelah membuat 2 tampilan sederhana, sekarang kita bikin coding Activity nya.

Main.java:

package com.belajar.TwoActivity;

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

public class Main extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button go = (Button)findViewById(R.id.main_btnPage);

        go.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent i = new Intent(Main.this, Child.class);
				i.putExtra("pesan", "From Activity Main");
				startActivity(i);
			}
		});
    }
}

Sedikit penjelasan ttg coding di atas:

Jadi seperti biasa, kita membuat fungsi pada saat button di klik. Di dalamnya kita buat Intent baru untuk membawa pesan dari Activity Main ini ke Child. Kemudian di dalam intent tersebut, saya tambahkan parameter “pesan” yang berisi string di atas agar nanti String ini dapat digunakan di Activity child.

Sep, lanjutnya kita coding untuk yang child

Child.java

package com.belajar.TwoActivity;

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

public class Child extends Activity{

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.child);

        TextView txtChild = (TextView)findViewById(R.id.child_txtPage);
        Button go = (Button)findViewById(R.id.child_btnPage);

        //menerima Intent yang dikirim
        Intent i = this.getIntent();
        txtChild.setText("This is child "+i.getStringExtra("pesan"));

        go.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				finish();
			}
		});
    }

}

Penjelasan lagi tentang coding Child.java diatas:

Di sini, pada baris ke-21, kita menampung Intent yang digunakan untuk mengawali Activity ini (dalam hal ini Intent yang kita buat di halaman Main). Kemudian saya mengubah isi dari TextView yang ada menjadi “This is Child” disambung dengan pesan yang telah kita kirim dari Activity Main tadi.
Kemudian untuk kembali ke halaman Main, kita menambahkan lagi fungsi pada button yang ada. Tapi kali ini fungsi yang kita buat hanya finish(), maksud dari finish disini adalah kita mengakhiri Activity ini, kemudian kita akan masuk ke Activity terakhir yang masih berjalan (dalam hal ini Activity Main karena kita belum mem”finish” nya). Fungsi finish ini mirip dengan jika kita menekan tombol back pada ponsel Android kita.

Setelah itu, jangan lupa untuk “mendaftarkan” semua Activity yang dibuat ke dalam AndroidManifest.xml, AndroidManifest akan secara otomatis menambahkan activity pertama yang kita buat. Jadi jika kita membuat Activity lain, jangan lupa untuk dimasukkan.

Isi dari AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.belajar.TwoActivity"
      android:versionCode="1"
      android:versionName="1.0">

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Main"
                  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:name=".Child"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Oke deh, setelah di jalankan, hasilnya akan seperti ini:

Sep, jadi kalo button di Main di klik, dia akan pindah ke Child, dan begitu sebaliknya..

Sekian, semoga berguna,, ^^

 

 
38 Comments

Posted by on April 1, 2011 in Tutorial Beginner

 

Tags: ,

38 responses to “Menghubungkan 2 Activity dalam Android

  1. toni

    June 20, 2011 at 4:27 am

    mantaps tutorailnya master. terima kasih. saya pemula banget di android, cuman tau sedikit2 tentang java. mo tanya tentang “Intent i = this.getIntent();” . bisa dijelasin fungsi “this” di situ merujuk ke mana? penggunaannya gimana di java master. maaf masih pemula nih.

     
    • Daniel Hace

      June 20, 2011 at 4:41 am

      thank you toni..
      yak, ‘this’ itu akan merujuk ke objek yang sedang active pada saat dia dipanggil.
      nah, karena di contoh di atas “this” nya ada di fungsi onCreate() punya Activity, jadi dia merujuk ke Activity itu sendiri..

       
  2. @gozali

    June 22, 2011 at 11:30 am

    setiap tutorial alangkah baiknya source code projects nya diupload om daniel ;))

     
    • Daniel Hace

      June 22, 2011 at 1:50 pm

      Terima kasih @gozali atas masukannya..
      Hoho, untuk sekarang sementara gw masukin ke code kaya diatas dulu ya,, kan bisa di copy-paste.. ^^

       
  3. khalifahkelima

    June 23, 2011 at 12:16 am

    Bagus nih mas tutorialnya. Mendasar dan perlu.

     
  4. toni

    June 23, 2011 at 4:11 am

    mau nanya tentang dasar java nih bang. newbie bangeet. itu “startActivity(i)” pada baris 24 pada kelas main itu methode dari kelas di java ya bang? kalo saya lihat di dokomentasi, methode itu ada di kelas context pada package android.content. yaitu “public abstract void startActivity (Intent intent)”. saya lihat di file diatas kok tidak ada yang menyatakan import.android.content.context ya bang? itu berarti cara memanggil methode startActivity(i) dari kelasnya pada tutorial diatas bagaimana bang? mohon pencerahanya bang. terima kasih.

     
    • Daniel Hace

      June 23, 2011 at 4:25 am

      humm, pertanyaan menarik… Terima kasih ya buat pertanyaan nya,,
      pertama-tama emang bener jadi fungsi startActivity itu ada dalam class context. Nah, pengertian context itu adalah interface untuk mengakses informasi global pada aplikasi. Singkatnya, Context ini abstract class yang disediakan oleh Android system yang memungkinkan user untuk mengakses resource dan class aplikasi. Nah, context ini akan otomatis tersedia saat kita meng-“extends” class yang kita buat dengan “Activity”. Untuk contoh fungsi lain di atas misal adalah setContentView().
      Untuk lebih jelasnya fungsi-fungsi dalam context bisa dilihat disini:
      http://developer.android.com/reference/android/content/Context.html

       
  5. toni

    June 23, 2011 at 4:25 am

    Bang, melanjutkan pertanyaan saya diatas, saya juga menemukan methode “public void startActivity (Intent intent)” pada kelas activity pada package android.app. bedanya apa ya dengan methode “public abstract void startActivity (Intent intent)” pada kelas context? terus cara memanggil methode kenapa bisa langsung (tidak perlu melalui obyeknya, misal obyek.startActivity().) maaf bang kalo banyak nanyanya. pengen belajar android bang. terima kasih

     
    • Daniel Hace

      June 23, 2011 at 4:42 am

      Hmmm, sebetulnya kedua fungsi itu mirip-mirip, tapi yang berasal dari kelas activity, itu dia membawa informasi activity sebelumnya (digunakan saat user menekan tombol back). Tapi yang dari kelas context, dia bisa membawa informasi activity sebelumnya, bisa juga tidak. Jika tidak, intent nya perlu diberi flag FLAG_ACTIVITY_NEW_TASK.
      Source: http://developer.android.com/reference/android/content/Context.html#startActivity(android.content.Intent)
      Kita tidak perlu memanggil objeknya, karena kita sudah meng”extends” class dengan Activity. Kalau mau manggi objek nya juga bisa kok, cara nya dengan Main.this.startActivity(Intent)

       
  6. toni

    June 23, 2011 at 5:08 am

    terima kasih atas pencerahannya bang. saya masih belajar dasar2 java. pernah baca2 bahwa variabel class dan methode class yang dimiliki kelas yang ditandai dengan identifier static itu cara aksesnya bisa langsung menuliskan seperti nama_kelas.nama_methode. tidak perlu memanggil lewat obyek. apakah memang seperti itu bang? masih bingung nih tentang cara akses variabel dan methode pada java..

     
    • Daniel Hace

      June 23, 2011 at 5:26 am

      yup2, untuk fungsi static, kita cuma perlu memanggil class nya tanpa perlu membuat obyek..
      Contoh dari fungsi static ini misalnya: Math.round(Double), jadi kita tidak perlu membuat objek baru dengan tipe Math.^^

       
  7. dimas

    June 23, 2011 at 3:10 pm

    wuih mantap,..!! ngebayangin btapa gampangnya klo di vb yg cuma pake Form2.show,..dan klo di android ampe segini codingnya,..hee..mantap .haha

     
  8. teddy

    June 23, 2011 at 7:07 pm

    maaf,,,bang saya mw nnya,,kl kita mw belajar android ap kita hrus,,bljar java terlebih dahulu..??makasih

     
    • Daniel Hace

      June 24, 2011 at 3:23 am

      Terima Kasih teddy..
      Hmm, kalo dari pengalaman gw si, gw dulu belajar java console doank, trus belajar Android nya sambil belajar Java lagi.. ^^

       
  9. teddy

    June 24, 2011 at 4:48 am

    maksh bang buat info nya,,,owwh y trus d tambah bang tutorial nya,,,sangat bermanfaat…

     
  10. greeaone

    June 24, 2011 at 5:03 pm

    om mau nanya lagi donk…

    yang mempengaruhu program bisa terjadi Force Close apa aja sih ?

     
    • Daniel Hace

      June 25, 2011 at 2:04 am

      Kalo penyebab force close itu bisa banyak sekali..
      Force close itu sebenarnya adalah aplikasi yang jalan sedang not responding, biasanya karena aplikasi menunjuk sesuatu yang tidak ada atau bernilai null..
      Tapi ada banyak penyebab lain, coba search aja Android Exception buat jadi referensi.

       
  11. Angga

    July 14, 2011 at 1:50 pm

    butuh pencerahannya mas, jadi saya ada kasus seperti ini

    saya punya 2 activity :

    activity 1 itu isinya button 1 , button 2
    activity 2 isinya hanya 1 imageview

    jika diklik button 1 background imageview di activity 2 berubah mnjadi image 1
    jika diklik button 2 background imageview di activity 2 berubah mnjadi image 2

    apa bisa mengirim gambar pakai intent ?

     
    • Daniel Hace

      July 14, 2011 at 1:58 pm

      Terima kasih Angga atas pertanyaannya..
      Hmm, kalau kasusnya gitu, biasanya gw si passing intent nya tetep String, bukan gambarnya. Jadi misal kalo di klik button1, yang di passing “frombutton1”, n kalo di klik button2 yang di passing “frombutton2” gitu..
      Nah, trus di activity 2 baru di cek if button 1, ImageView nya di setImage (image1), kalo button2, ImageView nya di setImage(image2)..
      Semoga membantu..^^

       
  12. Angga

    July 14, 2011 at 5:00 pm

    Terima Kasih mas akhirnya bisa…….

     
  13. Arif Febriyanto

    July 20, 2011 at 2:39 pm

    cukup membantu, terima kasih 😀

     
  14. Arif Febriyanto

    July 26, 2011 at 6:15 am

    oya bang tangi nih, kok di android manifest itu kan harus didaftarin ya untuk intentnya….
    pertanyaannya,untuk activitiya fungsi main jadi berubah .Main ya?
    terus untuk activity child, intent action jadi view, dan category jadi default itu penjelasannya gimana ya?

     
    • Daniel Hace

      July 27, 2011 at 3:54 pm

      Untuk yg <activity android:name=".Main" itu soalnya nama Activity nya Main.java, dia ngikutin nama activity nya.
      nah, kalo yg untuk

      MAIN & LAUNCHER soalnya dia merupakan activity pertama yg bakal dijalanin saat app dimulai,,
      trus VIEW & DEFAUILT di child soalnya tujuannya buat view alias nampilin dan bukan dijalanin pertama kali,
      ada banyak kok jenis2nya, bisa di Ctrl + Spasi buat liat ada apa aja, tapi yg biasa gw pake si cuma 2 itu..^^
      terima kasih.

       
  15. christ

    July 29, 2011 at 3:24 am

    Wah,kaga mudeng…gw nyimak aja..simpan dulu tutornya..trims.

     
  16. totok

    August 21, 2011 at 3:51 pm

    gan mw tanya… ni di atas udah di coba, trus berhasil… nah pertanyaan saya klo misal kita mw buat banyak link gitu brarti yang di AndroidManifest di tambahin activitynya doang gt … maap baru belajar 🙂
    ….

    ….

    mohon pencerahannya gan..

     
    • Daniel Hace

      September 7, 2011 at 5:53 pm

      Terimakasih totok..
      Yup2 benar, jadi kalau mau bikin Activity baru lagi, di AndroidManifest nya ditambahin tag lagi, jadi misal gw mau nambahin Activity child2 nih, berarti dibawah diberi code lagi:

      <activity android:name=".Child2"
                        android:label="@string/app_name">
                  <intent-filter>
                      <action android:name="android.intent.action.VIEW" />
                      <category android:name="android.intent.category.DEFAULT" />
                  </intent-filter>
      </activity>
      
       
  17. Jun

    February 24, 2012 at 6:21 am

    Makasi mas untuk tutorialnya.

    saya mau bertanya kenapa pas dirunning selalu force closed ya. Pas saya lihat di log chat, force closednya di line 24 tepatnya dsini mas “startActivity(i);”

    kenapa ya mas.. Mohon pencerahannya mas.

     
    • Daniel Hace

      March 3, 2012 at 9:37 am

      Halo Jun,
      iya, kalau force close di line startActivity(i), mungkin penyebabnya karena kamu belum menambahkan tag activity kamu dalam AndroidManifest.xml seperti di bagian akhir posting saya di atas, jadi manifest nya diberi:

      <activity android:name=".Child2"
      android:label="@string/app_name">
      <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
      </activity>

       
  18. lola080211

    July 7, 2012 at 3:27 am

    mantap tutorialnya bang. mau nanya nih

    bisa ga button -nya kalau di-click menuju ke link? misalnya button1 menuju ke google, button2 menuju ke fb, dst..

    kalau bisa, mohon pencerahannya bang 🙂

     
  19. Safin

    July 13, 2012 at 5:35 pm

    trimakasih banyak mas untuk tutorialnya. . . .ane lgi nyusun skrpsi bwt app android, msih bingung hbungin 2 activity. . .bis bca nih tutorial jdi ad pencerahan. . . .makasih banget mas. . .

     
  20. dikkie

    July 30, 2012 at 5:20 pm

    klo bikin activity seperti ini dgn 2 package gmn om??
    act1 package pertama trus act2 package kdua..
    saya bikin pke 2 package tp ko error yaa?!
    not permission gtu katanya..

     
    • Daniel Hace

      October 28, 2012 at 9:17 am

      Hi Dikkie,
      kalau activity nya bukan di package utama, waktu di deklarasi di manifest, bagian activity name nya ditulis komplit sama package nya.
      misal:

      <activity
            android:name="com.daniel.myApps.MainActivity"
            android:label="@string/app_name">
      </activity>
      

      thanks.

       
  21. Rochmat

    November 29, 2012 at 4:17 pm

    Makasih banyak untuk tutorialnya

    Mau tanya knp muncul error “cannot be resolved to a type” dan error nya menunjuk ke baris ini:

    Intent i = new Intent(Main.this, Child.class);

    padahal sdh sesuai langkah2 tutorial di atas

    Maap sy baru belajar…hehe

     
    • Daniel Hace

      February 14, 2013 at 3:52 pm

      Hi Rochmat,

      itu kemungkinan karena Intent nya belum diimport. Cara gampang import nya, coba klik tanda error nya di sebelah kiri, lalu pilih Import Intent.

      Thanks.

       
  22. Abbas Adam Az-Zuhri

    January 22, 2013 at 4:44 pm

    Mas, saya mau tnya, mengenai getStringExtra() yg didalam kurung kalau kita gak tahu apa yg dikirim dari activity yg sebelumnya bagaimana solusi untuk mengisi yg didalam kurung ituu Mas? mohon solusinya termakasih.

     
    • Daniel Hace

      February 14, 2013 at 3:54 pm

      Hi Abbas,

      hmmm, kasus nya gimana nih, kok bisa gatau yg dikirim activity sebelumnya??
      soalnya kan intent kita yg deskripsiin di activity yang manggil dengan cara putExtra(“key”,”value”) itu. Di dalem getStringExtra nya tinggal nyamain sama “key” nya aja.

      Thanks

       
  23. Faisal Anugrah

    February 7, 2013 at 5:07 pm

    gan ane udah samain tu coding sama punya ente…
    eh terus aja force close
    kira2 apa yang masih salah?
    soalnya di codingnya engga tanda salah
    mohon pencerahaannya gan…
    pliss

     
    • Daniel Hace

      February 14, 2013 at 3:55 pm

      Hi Faisal,

      apakah udah menambah tag baru di AndroidManifest nya??
      biasa error nya karena kelupaan daftarin activity ke AndroidManifest.

      Thanks

       

Leave a reply to totok Cancel reply