Memulai 'Activity' Lain

Setelah selesai dengan latihan sebelumnya, kita sudah berhasil membuat app yang menampilkan satu 'activity' (satu tampilan layar saja) yang berisi satu 'text field' dan satu 'button'. Jadi kita sudah tahu sekarang bahwa 'activity' adalah 'window' tampilan yang berisi 'user interface' dari aplikasi kita. Biasanya aplikasi akan berisi satu atau lebih 'acitivity'; dan tujuan utama 'activity' adalah untuk berinteraksi dengan user. Dalam latihan ini, kita akan menambahkan beberapa kode ke 'MainActivity' yang memulai/mengaktifkan satu 'activity' baru ketika user men-klik tombol 'Send'.

Merespon Tombol 'Send'

1. Di file "res > layout > activity_main.xml", tambahkan atribut 'android:onClick' ke elemen <Button> seperti berikut:
<Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/button_send"
      android:onClick="sendMessage" />
Atribut ini akan memberitahu sistem untuk memanggil 'method/fungsi sendMessage()' pada 'activity' kita ketika user men-klik tombol atau 'button'.

2. Pada file "java > com.example.myfirstapp > MainActivity.java", tambahkan 'method/fungsi sendMessage() seperti di bawah ini:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
// Do something in response to button
}
}
Supaya sistem mencocokkan 'method' ini ke nama 'method' yang diberikan di 'android:onClick', penandaanya harus ditunjukkan dengan tepat. Secara khusus 'method' ini harus:
  • 'public'
  • memiliki nilai kembalinya adalah 'void'
  • memiliki 'View' sebagai satu-satunya parameter (ini adalah 'View' yang sudah di-klik)
Berikutnya kita akan mengisi 'method' ini supaya bisa membaca konten dari 'text field' dan menampilkan teksnya ke 'activity' yang lain.

Membuat 'Intent'

Selain 'activity', konsep unik lainnya di dalam Android adalah 'Intent'. Intent pada dasarnya adalah seperti lem (perekat) yang memungkinkan 'activity' yang lain dan juga dari aplikasi yang lain untuk saling bekerja sama dengan baik (berpindah-pindah antara 'activity' satu ke 'activity' lainnya) dan memastikan bahwa berbagai macam hal bisa dilakukan seolah-olah semua itu dilakukan oleh satu aplikasi saja. Suatu 'Intent' adalah suatu object yang memberikan 'runtime' untuk menyambung antara komponen-komponen yang terpisah (misalnya dua 'acitvity'). 'Intent' menggambarkan bahwa suatu app memiliki suatu 'maksud/intent untuk melakukan sesuatu'. Kita bisa menggunakan 'intent' untuk berbagai macam tugas, tetapi dalam latihan ini, 'intent' kita akan memicu/memulai 'activity' lainnya.

Pada 'MainActivty.java', tambahkan kode 'sendMessage()' seperti di bawah ini:
public class MainActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
Android Studio akan menampilkan error 'Cannot resolve symbol' karena kode ini mengacu 'class' yang belum di-import. Kita bisa mengatasinya beberapa dari error ini dengan fungsionalitas 'import class' dari Android Studio dengan menekan 'Alt + Enter" (atau Option + Return pada Mac). Hasil import kita seharusnya akan muncul seperti berikut:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
Satu error masih muncul yaitu error untuk 'DisplayMessageActivity', tetapi sampai disini sudah okay, kita akan membetulkannya pada latihan berikutnya.

Ada banyak hal yang perlu kita bahas di dalam 'sendMessage()', mari kita pelajari apa yang ada disitu.

Constructor 'Intent' memiliki dua parameter:
  • 'Context' sebagai parameter pertama ('this' digunakan karena class 'Activity' adalah subclass dari 'Context').
  • Class dari komponen app dimana sistem akan menempelkan 'Intent' (dalam hal ini, 'activity' yang akan dimulai/dipicu)
Catatan:
Pengacuan ke 'DisplayMessageActivity' akan menimbulkan error di Android Studio karena class tersebut belum ada. Abaikan saja error ini untuk sementara waktu; kita akan membuat class ini segera.

Method 'putExtra()' mengisi nilai dari 'EditText' ke 'intent'. Suatu 'Intent' bisa mempunyai tipe-tipe data sebagai sepasang 'key' dan 'value' yang disebut dengan 'extras'. 'Key' kita adalah konstanta 'public EXTRA_MESSAGE' karena 'activity' berikutnya menggunakan 'key' ini untuk mendapatkan 'value' text-nya. Praktik yang baik dalam membuat 'key' untuk 'intent extras' adalah dengan menggunakan nama 'package' dari app kita sebagai prefix. Tujuannya adalah memastikan bahwa 'key' itu betul-betul 'unique', supaya aman seandainya app kita berinteraksi dengan app yang lain.

Method 'startActivity()' memulai/memicu instans dari 'DisplayMessageActivity' yang ditentukan oleh 'Intent'. Sekarang kita perlu membuat class tersebut.

Membuat 'Activity' Kedua

1. Di jendela "Project", klik-kanan folder "app" dan pilih "New > Activity > Empty Activity"
2. Di jendela "Configure Activity", masukkan 'DisplayMessageActivity' untuk "Activity Name" dan klik "Finish"

Android Studio secara otomatis melakukan tiga hal yaitu:
  • Membuat class 'DisplayMessageActivity.java' dengan implementasi dari method 'onCreate()'.
  • Membuat file layout yang berbungan dengan class java di atas yaitu 'activity_display_message.xml'
  • Menambahkan elemen yang diperlukan di dalam 'AndroidManifest.xml' 
Bila kita menjalankan app ("Run") dan men-klik tombol 'Send' di 'activity' pertama, maka 'activity' kedua akan mulai/dipicu tetapi masih tampak kosong. Ini karena 'activity' kedua menggunakan default dari empty layout yang disediakan oleh template.

Menampilkan 'Message'

Sekarang kita akan memodifikasi 'activity' kedua supaya menampilkan 'message' yang dikirim oleh 'activity' pertama.

1. Di file DisplayMessageActivity.java, tambahkan kode berikut ke method 'onCreate()':
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message); 
ViewGroup layout = (ViewGroup) findViewById(R.id.activity_display_message);
layout.addView(textView);
}
2. Tekan Alt + Enter (atau Option + Return di Mac) untuk import class-class yang belum ada. Hasil import kita seharusnya adalah seperti berikut:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.TextView;
Ada beberapa hal yang perlu dijelaskan disini:
  1. Pemanggilan terhadap 'getIntent()' akan mengambil 'intent' yang telah memulai/memicu 'activity'. Setiap 'Activity' dipanggil oleh suatu 'Intent', terlepas bagaimana user menavigasi kesana. Pemanggilan method 'getStringExtra()' akan mengambil data dari 'activity' pertama.
  2. Kita membuat 'TextView' dan men-set ukuran dan mengambil 'message'-nya.
  3. Kita menambahkan 'TextView' ke layout yang dibuat oleh 'R.id.activity_display_message'. Kita menaruh layout tersebut ke 'ViewGroup' karena ini adalah superclass dari semua layout dan punya method 'addView()'.
Catatan:
Layout XML yang dihasilkan oleh Android Studio versi sebelumnya mungkin tidak memasukkan atribut 'android:id'. Pemanggilan terhadap method 'findViewById()' akan gagal bila file layout tersebut tidak memiliki atribut 'android:id'. Bila ini terjadi, buka file 'activity_display_message.xml' dan tambahkan atribut 'android:id="@+id/activity_display_message" ke elemen layout.
Kita sekarang bisa menjalankan app ("Run"). Ketika app sudah terbuka, ketikkan suatu 'message' di 'text field' dan klik 'Send'. 'Activity' kedua akan menggantikan yang pertama di layar, dan menampilkan 'message' yang kita masukkan di 'activity' pertama.


Begitulah, akhirnya kita sudah membuat app Android pertama kita!

Untuk latihan lebih detil bisa mengikuti link di bawah ini untuk mempelajari topik tentang:
Mendukung Berbagai Perangkat Yang Berbeda-beda yang terdiri dari topik tentang:

No comments: