* 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();
}
}
masalah di cheatButton gan.. error mulu
BalasHapus