6. Activity dan Intent

Share:
Yang akan Anda pelajari di artikel ini, yaitu :
* Materi tentang Activity dan Intent
* Membuat Activity dan Intent
* Mengirim data antar activity
* Mendapatkan data kembali dari aktivitas


Pemahaman tentang Activity

Suatu aplikasi Adroid dapat memiliki Activity atau tidak sama sekali. Umumnya, aplikasi memiliki satu atau lebih aktivitas. Tujuan utama dari Activity adalah untuk berinteraksi dengan pengguna. Activity melewati beberapa state di saat mulai tampil di layar sampai dengan menghilang dari layar. State ini disebut dengan life cycle (siklus hidup). Kita perlu memahami betul siklus hidup dari Activity untuk menjamin bahwa aplikasi yang dibuat berjalan dengan benar. Sebagai tambahan, ada yang dinamakan dengan Fragment. Yaitu seperti miniatur dari activity yang dapat dikelompokkan untuk membentuk suatu activity.
Pada activity diperlukan suatu object sebagai mekanisme message-passing, yaitu Intent. Intent digunakan untuk berbagai tujuan, yaitu secara eksplisit memulai Service atau Activity menggunakan nama kelas, memulai Activity atau Service untuk melakukan sebuah action (camera, contact, dll), dan Broadcast bahwa suatu event telah terjadi.


Membuat activity baru
 
Untuk membuat activity baru, pilih :
File -> New -> Activity -> Empty Activity
Kemudian beri nama SecondActivity, yang akan kita gunakan sebagai activity kedua.



Jika sudah, maka Android studio akan membuat file java dan secara otomatis membuat file layout dan mendaftarkan activity pada file manifest. Tidak seperti eclipse yang harus menambahkan secara manual layout dan mendaftar di manifest.

Menjalankan activity baru
Untuk menjalankan activity baru, diperlukan objek Intent untuk memberikan informasi tujuan atau activity yang akan dijalankan. Activity yang pertama kali dijalankan disebut dengan parent activity, sedangkan activity lain yang dijalankan disebut dengan child activity. Di bawah ini merupakan cara untuk menjalankan activity baru.

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);


Melewatkan nilai ke activity lain (child activity)
Objek Intent dapat digunakan untuk melewatkan nilai. Seperti di bawah ini.

// Membuat objek Intent untuk menjalankan SecondActivity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("pesan", "Ini pesan");
intent.putExtra("angka", 7);
startActivity(intent);


Menerima nilai yang dilewatkan
Untuk menerima nilai yang dilewatkan, gunakan kode di bawah di kelas activity baru (child activity).

Bundle bundle = getIntent().getExtras();

// Mendapatkan passing value String pesan
String pesan = bundle.getString("pesan");

// Mendapatkan passing value int Angka
// Jika tidak ada nilai, maka akan menggunakan default : 0
int angka = bundle.getInt("angka", 0);


Mendapatkan kembali nilai dari child Activity
Agar dapat menerima kembali nilai dari child Activity, gunakan startActivityForResult() untuk menjalankan child activity, seperti potongan kode di bawah.

// Membuat objek Intent untuk menjalankan SecondActivity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 0); // 0 adalah kode request


Aplikasi sederhana menggunakan startActivityForResult

 
Kita akan membuat aplikasi quiz yang dapat menampilkan pertanyaan dan melihat jawaban. Apabila pengguna terlebih dahulu melihat jawaban, maka akan ada peringatan bahwa tidak boleh melakukan kecurangan.


Parent Activity

activity_main.xml

<?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:gravity="center"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Apakah bumi itu bulat ?" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="yesClicked"
            android:text="Ya"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="noClicked"
            android:text="Tidak"/>

    </LinearLayout>

    <Button
        android:id="@+id/cheatButton"
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Lihat jawaban"/>

</LinearLayout>


MainActivity.java

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    // EXTRA KEY
    public static final String EXTRA_ANSWER = "EXTRA_ANSWER";
    public static final String RESULT_STRING = "RESULT_STRING";
    public static final int ANSWER_REQUEST = 0;

    // Variabel answer yang bernilai ya atau tidak
    public String answer = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Menambahkan event listener onClick pada cheatButton
        Button buttonCheat = (Button) findViewById(R.id.cheatButton);
        buttonCheat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startSecondActivity();
            }
        });
    }

    public void startSecondActivity(){
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        intent.putExtra(EXTRA_ANSWER, answer);
        startActivityForResult(intent, ANSWER_REQUEST);
    }

    public void yesClicked(View view){
        // method listener onClick yang ditambahkan di xml
        answer = "ya";
        Toast.makeText(getApplicationContext(), "Anda menjawab ya", Toast.LENGTH_SHORT).show();
    }

    public void noClicked(View view){
        // method listener onClick yang ditambahkan di xml
        answer = "tidak";
        Toast.makeText(getApplicationContext(), "Anda menjawab tidak", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
        // Anda bisa membuat lebih dari satu requestCode
        // Jika request code nya adalah ANSWER_REQUEST
        // dan statusnya adalah OK
        if (requestCode == ANSWER_REQUEST && resultCode == RESULT_OK){
            // Menerima nilai yang dikembalikan dari SecondActivity
            String result_string = data.getStringExtra(MainActivity.RESULT_STRING);

            // Memberi notif toast ke layar
            Toast.makeText(getApplicationContext(), result_string, Toast.LENGTH_SHORT).show();
        }
    }
}


Child Activity

activity_second.xml

<?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:gravity="center"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bumi itu bulat"/>

    <Button
        android:id="@+id/backButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="backClicked"
        android:text="Kembali"/>

</LinearLayout>


SecondActivity.java

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class SecondActivity extends AppCompatActivity {

    public String answer = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        // Menerima nilai yang dilewatkan
        Bundle bundle = getIntent().getExtras();
        answer = bundle.getString(MainActivity.EXTRA_ANSWER);
    }

    public void backClicked(View view){
        Intent data = new Intent();

        if (answer.isEmpty()){
            data.putExtra(MainActivity.RESULT_STRING, "Terjadi kecurangan");
        } else {
            if (answer.equals("ya")){
                data.putExtra(MainActivity.RESULT_STRING, "Jawaban benar");
            } else {
                data.putExtra(MainActivity.RESULT_STRING, "Jawaban salah");
            }
        }

        // Mengembalikan nilai yang akan dikirim ke onActivityResult
        setResult(RESULT_OK, data);
        finish();
    }
}



1 komentar: