2.1: Memahami Aktivitas dan Maksud

Materi:

Dalam bab ini Anda akan mempelajari tentang aktivitas, blok pembangunan utama antarmuka pengguna aplikasi, serta penggunaan maksud untuk berkomunikasi di antara aktivitas.

Tentang aktivitas

Aktivitas menyatakan layar tunggal di aplikasi Anda dengan antarmuka yang bisa digunakan pengguna untuk berinteraksi. Misalnya, aplikasi email mungkin memiliki satu aktivitas yang menampilkan daftar email baru, aktivitas lain untuk menulis email, dan aktivitas lainnya lagi untuk membaca pesan satu per satu. Aplikasi Anda adalah koleksi aktivitas yang dibuat sendiri atau yang digunakan kembali dari aplikasi lain.

Meskipun aktivitas di aplikasi Anda bekerja sama membentuk pengalaman pengguna yang kohesif di aplikasi, setiap aplikasi tidak saling bergantung. Proses ini memungkinkan aplikasi memulai aktivitas di aplikasi lainnya, dan aplikasi lainnya bisa memulai aktivitas Anda (jika aplikasi mengizinkannya). Misalnya, aplikasi perpesanan yang Anda tulis bisa memulai aktivitas di aplikasi kamera untuk mengambil gambar, kemudian memulai aktivitas di aplikasi email untuk memungkinkan pengguna berbagi gambar itu di email. Aplikasi Anda bisa memulai aktivitas yang berbeda

Umumnya, satu aktivitas di aplikasi ditetapkan sebagai aktivitas "utama", yang disajikan kepada pengguna saat membuka aplikasi untuk pertama kali. Kemudian setiap aktivitas bisa memulai aktivitas lainnya untuk melakukan tindakan yang berbeda.

Setiap kali aktivitas baru dimulai, aktivitas sebelumnya akan dihentikan, namun sistem mempertahankan aktivitas dalam tumpukan ("back-stack"). Bila pengguna selesai dengan aktivitas saat ini dan menekan tombol Kembali, aktivitas akan muncul dari tumpukan (dan dimusnahkan) dan aktivitas sebelumnya dilanjutkan.

Bila aktivitas dihentikan karena aktivitas baru dimulai, aktivitas pertama akan diberi tahu tentang perubahan tersebut dengan metode callback daur hidup aktivitas. Daur hidup Aktivitas adalah serangkaian keadaan aktivitas, mulai dari pertama kali dibuat, hingga setiap kali dihentikan atau dilanjutkan, hingga bila sistem memusnahkannya. Anda akan mengetahui selengkapnya tentang daur hidup aktivitas di bab berikutnya.

Membuat aktivitas

Untuk mengimplementasikan aktivitas di aplikasi Anda, lakukan yang berikut ini:

  • Buat kelas Java aktivitas.
  • Implementasikan antarmuka pengguna untuk aktivitas itu.
  • Deklarasikan aktivitas baru itu di manifes aplikasi.

Bila Anda membuat proyek baru untuk aplikasi atau menambahkan aktivitas baru ke aplikasi, di Android Studio (dengan File > New > Activity), kode template untuk setiap tugas ini akan disediakan untuk Anda.

Buat kelas aktivitas

Aktivitas adalah subkelas dari kelas Activity atau salah satu dari subkelasnya. Jika Anda membuat proyek baru di Android Studio, aktivitas tersebut secara default menjadi subkelas dari kelas AppCompatActivity. Kelas AppCompatActivity adalah subkelas Activity yang memungkinkan Anda menggunakan fitur aplikasi Android terbaru seperti bilah aksi dan desain material, sementara tetap memungkinkan aplikasi tersebut kompatibel dengan perangkat yang menjalankan Android versi lama.

Inilah subkelas kerangka dari aktivitas AppCompatActivity:

public class MainActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
   }
}

Tugas pertama Anda di subkelas aktivitas adalah mengimplementasikan metode callback daur hidup aktivitas standar (seperti OnCreate()) untuk menangani perubahan keadaan aktivitas. Perubahan keadaan ini meliputi hal-hal seperti kapan aktivitas dibuat, dihentikan, dilanjutkan, atau dimusnahkan. Anda akan mengetahui selengkapnya tentang daur hidup aktivitas dan callback daur hidup di bab berikutnya.

Salah satu callback yang diperlukan dan harus diimplementasikan oleh aplikasi Anda adalah metode onCreate(). Sistem memanggil metode ini bila membuat aktivitas, dan semua komponen penting aktivitas Anda harus melakukan diinisialisasi di sini. Yang paling penting, metode OnCreate() memanggil setContentView() untuk membuat layout utama aktivitas.

Anda biasanya mendefinisikan antarmuka pengguna untuk aktivitas di satu atau beberapa file layout XML. Bila metode setContentView() dipanggil dengan jalur ke file layout, sistem akan membuat semua tampilan awal dari layout yang ditetapkan dan menambahkannya ke aktivitas Anda. Hal ini sering kali disebut sebagai memekarkan layout.

Sering kali Anda mungkin juga ingin mengimplementasikan metode onPause() di kelas aktivitas. Sistem memanggil metode ini sebagai indikasi pertama bahwa pengguna meninggalkan aktivitas Anda (walaupun tidak selalu berarti aktivitas akan dimusnahkan). Di sinilah biasanya Anda harus mengikat perubahan yang harus dipertahankan di luar sesi pengguna saat ini (karena pengguna mungkin tidak akan kembali). Anda akan mengetahui selengkapnya tentang callback onPause() dan semua callback daur hidup lainnya di bab berikutnya.

Selain daur hidup callback, Anda juga bisa mengimplementasikan metode di aktivitas untuk menangani perilaku lainnya seperti masukan pengguna atau klik tombol.

Implementasikan antarmuka pengguna

Antarmuka pengguna untuk aktivitas disediakan menurut hierarki tampilan, yang mengontrol ruang tertentu dalam jendela aktivitas dan bisa merespons interaksi pengguna.

Cara yang paling umum untuk mendefinisikan antarmuka pengguna yang menggunakan tampilan adalah dengan file layout XML yang disimpan sebagai bagian dari sumber daya aplikasi Anda. Mendefinisikan layout di XML memungkinkan Anda untuk mengelola desain antarmuka pengguna secara terpisah dari kode sumber yang mendefinisikan perilaku aktivitas.

Anda juga bisa membuat tampilan baru secara langsung di kode aktivitas Anda dengan menyisipkan objek tampilan baru ke dalam ViewGroup, kemudian meneruskan ViewGroup akar ke setContentView(). Setelah layout dimekarkan -- apa pun sumbernya -- Anda bisa menambahkan lebih banyak tampilan di Java di mana saja dalam hierarki tampilan.

Deklarasikan aktivitas di manifes

Setiap aktivitas di aplikasi Anda harus dideklarasikan di manifes aplikasi Android bersama elemen <activity> , di dalam <application>. Bila Anda membuat proyek baru atau menambahkan aktivitas baru ke proyek di Android Studio, manifes akan dibuat atau diperbarui untuk menyertakan deklarasi aktivitas kerangka bagi setiap aktivitas. Inilah deklarasi untuk aktivitas utama.

<activity android:name=".MainActivity" >
   <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

Elemen <activity> menyertakan sejumlah atribut untuk mendefinisikan properti aktivitas seperti label, ikon, atau tema. Satu-satunya atribut yang diperlukan adalah android:name, yang menetapkan nama kelas aktivitas (seperti "MainActivity"). Lihat referensi elemen <activity> untuk informasi selengkapnya tentang deklarasi aktivitas.

Elemen <activity> juga bisa menyertakan deklarasi untuk filter maksud. Filter maksud menetapkan jenis maksud yang akan diterima aktivitas Anda.

 <intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Filter maksud harus menyertakan setidaknya satu elemen, dan juga bisa menyertakan sebuah dan opsional. Aktivitas utama untuk aplikasi Anda memerlukan filter maksud yang mendefinisikan aksi "main" dan kategori "launcher" agar sistem bisa meluncurkan aplikasi. Android Studio membuat filter maksud ini untuk aktivitas utama di proyek Anda:

Elemen menetapkan bahwa ini adalah titik masuk "utama" ke aplikasi. Elemen menetapkan bahwa aktivitas ini harus tercantum dalam peluncur aplikasi sistem (untuk memungkinkan pengguna meluncurkan aktivitas ini).

Aktivitas lain di aplikasi Anda juga bisa mendeklarasikan filter maksud, namun hanya aktivitas utama yang harus menyertakan aksi "utama". Anda akan mengetahui selengkapnya tentang maksud implisit dan filter maksud dalam bab berikutnya.

Tambahkan lebih banyak aktivitas ke proyek Anda

Aktivitas utama untuk aplikasi Anda dan file layout terkait disertakan bersama proyek bila Anda membuatnya. Anda bisa menambahkan aktivitas baru ke proyek di Android Studio dengan menu File > New > Activity. Pilih template aktivitas yang ingin Anda gunakan, atau buka Gallery untuk melihat semua template yang tersedia. Galeri Aktivitas di Android Studio

Bila memilih sebuah template aktivitas, Anda akan melihat serangkaian layar yang sama untuk membuat aktivitas baru yang dilakukan saat membuat proyek di awal. Android Studio menyediakan tiga hal ini untuk setiap aktivitas baru di aplikasi Anda:

  • File Java untuk aktivitas baru dengan definisi kelas kerangka dan metode onCreate(). Aktivitas baru, seperti aktivitas utama, adalah subkelas AppCompatActivity.
  • File XML yang berisi layout untuk aktivitas baru. Perhatikan, metode setContentView() di kelas aktivitas akan memerkarkan layout baru ini.
  • Elemen <activity> tambahan di manifes Android yang menetapkan aktivitas baru. Definisi aktivitas kedua tidak menyertakan filter maksud apa pun. Jika Anda ingin menggunakan aktivitas ini hanya dalam aplikasi (dan tidak memungkinkan aktivitas tersebut dimulai oleh aplikasi lain), maka tidak perlu menambahkan filter.

Tentang maksud

Semua aktivitas Android dimulai atau diaktifkan dengan maksud. Maksud adalah objek pesan yang membuat permintaan yang akan digunakan oleh waktu proses Android untuk memulai aktivitas atau komponen aplikasi lainnya di aplikasi Anda atau di beberapa aplikasi lainnya. Anda tidak bisa memulai aktivitas itu sendiri;

Bila aplikasi pertama kali dimulai dari layar utama perangkat, waktu proses Android akan mengirimkan maksud ke aplikasi Anda untuk memulai aktivitas utama aplikasi (yang didefinisikan dengan aksi MAIN dan kategori LAUNCHER di Manifes Android). Untuk memulai aktivitas lain di aplikasi Anda, atau meminta tindakan untuk dilakukan oleh beberapa aktivitas lain yang tersedia di perangkat, bangunlah maksud sendiri dengan kelas Intent dan panggil metode startActivity() untuk mengirim maksud itu.

Selain untuk memulai aktivitas, maksud juga digunakan untuk meneruskan data di antara aktivitas. Bila membuat maksud untuk memulai aktivitas baru, Anda bisa menyertakan informasi tentang data yang diinginkan untuk mengoperasikan aktivitas baru itu. Jadi, misalnya, aktivitas email yang menampilkan daftar pesan bisa mengirim maksud ke aktivitas yang menampilkan pesan itu. Aktivitas tampilan memerlukan data tentang pesan yang akan ditampilkan, dan Anda bisa menyertakan data itu di maksud.

Dalam bab ini, Anda akan mempelajari tentang penggunaan maksud bersama aktivitas, namun maksud juga digunakan untuk memulai layanan dan penerima siaran. Anda akan mempelajari tentang kedua komponen aplikasi itu nanti di buku ini.

Tipe maksud

Ada dua tipe maksud di Android:

  • Maksud eksplisit menetapkan aktivitas penerima (atau komponen lainnya) melalui nama kelas yang benar-benar memenuhi syarat di aktivitas tersebut. Gunakan maksud eksplisit untuk memulai komponen di aplikasi milik sendiri (misalnya, untuk beralih layar di antarmuka pengguna), karena Anda sudah mengetahui paket dan nama kelas komponen itu.
  • Maksud implisit tidak menetapkan aktivitas tertentu atau komponen lainnya untuk menerima maksud. Sebagai gantinya, Anda mendeklarasikan aksi umum yang dilakukan di maksud tersebut. Sistem Android mencocokkan permintaan Anda dengan aktivitas atau komponen lainnya yang bisa menangani aksi permintaan tersebut. Anda akan mengetahui selengkapnya tentang maksud implisit dalam bab berikutnya.

Objek dan bidang Intent

Objek Intent adalah instance kelas Intent. Untuk maksud eksplisit, bidang kunci suatu maksud menyertakan yang berikut ini:

  • Kelas aktivitas (untuk maksud eksplisit). Ini adalah nama kelas aktivitas atau komponen lainnya yang akan menerima maksud, misalnya, com.example.SampleActivity.class. Gunakan konstruktor maksud atau metode setComponent(), setComponentName() atau setClassName() maksud untuk menetapkan kelas.
  • Data maksud. Bidang data maksud berisi referensi ke data yang Anda inginkan untuk mengoperasikan aktivitas penerima, sebagai objek Uri.
  • Ekstra maksud. Ini adalah pasangan nilai-kunci yang membawa informasi yang diperlukan aktivitas penerima untuk melakukan aksi yang diminta.
  • Flag maksud. Ini adalah bit metadata tambahan, yang didefinisikan oleh kelas Intent. Flag dapat menginstruksikan sistem Android tentang cara meluncurkan aktivitas atau cara memperlakukan aktivitas setelah diluncurkan.

Untuk maksud implisit, Anda juga mungkin perlu mendefinisikan kategori dan aksi maksud. Anda akan mengetahui selengkapnya tentang kategori dan aksi maksud di bagian 2.3.

Memulai aktivitas dengan maksud eksplisit

Untuk memulai aktivitas tertentu dari aktivitas lain, gunakan maksud eksplisit dan metode startActivity(). Maksud eksplisit menyertakan nama kelas yang benar-benar memenuhi syarat untuk aktivitas atau komponen lainnya di objek Intent. Semua bidang maksud lainnya bersifat opsional, dan nol secara default.

Misalnya, jika Anda ingin memulai ShowMessageActivity untuk menampilkan pesan tertentu di aplikasi email, gunakan kode seperti ini.

Intent messageIntent = new Intent(this, ShowMessageActivity.class);
startActivity(messageIntent);

Konstruktor Intent menggunakan dua argumen untuk maksud eksplisit.

  • Konteks aplikasi. Dalam contoh ini, kelas aktivitas menyediakan materi (di sini, this).
  • Komponen tertentu untuk dimulai (ShowMessageActivity.class).

Gunakan metode startActivity() bersama objek maksud baru sebagai satu-satunya argumen. Metode startActivity() mengirim maksud ke sistem Android, yang meluncurkan kelas ShowMessageActivity atas nama aplikasi Anda. Aktivitas baru muncul pada layar dan aktivitas pembuatnya dihentikan sementara.

Aktivitas yang dimulai tetap pada layar hingga pengguna mengetuk tombol kembali pada perangkat, pada saat itu aktivitas ditutup dan diklaim kembali oleh sistem, dan aktivitas yang menghasilkannya akan dilanjutkan. Anda juga bisa menutup aktivitas yang dimulai secara manual sebagai respons terhadap aksi pengguna (seperti klik tombol) dengan metode finish():

public void closeActivity (View view) {
    finish();
}

Meneruskan data di antara aktivitas dengan maksud

Selain untuk memulai satu aktivitas dari aktivitas lain, Anda juga menggunakan maksud untuk meneruskan informasi di antara aktivitas. Objek maksud yang Anda gunakan untuk memulai aktivitas bisa menyertakan data maksud (URI objek untuk bertindak), atau ekstra maksud, yang merupakan bit data tambahan yang mungkin diperlukan aktivitas.

Di aktivitas (pengirim) pertama:

  1. Buat objek Intent.
  2. Masukkan data atau ekstra ke dalam maksud itu.
  3. Mulailah aktivitas baru dengan startActivity().

Di aktivitas (penerima) kedua:

  1. Dapatkan objek maksud yang digunakan memulai aktivitas.
  2. Ambil data atau ekstra dari objek Intent.

Waktu untuk menggunakan data maksud atau ekstra maksud

Anda bisa menggunakan data maksud dan ekstra maksud untuk meneruskan data di antara aktivitas. Ada sejumlah perbedaan utama antara data dan ekstra yang menentukan mana yang harus Anda gunakan.

Data maksud hanya bisa menyimpan satu bagian informasi. URI yang menyatakan lokasi data yang ingin Anda gunakan untuk mengoperasikan. URI tersebut bisa berupa URL laman web (http://), nomor telepon (tel://), lokasi geografis (geo://), atau URI khusus lainnya yang Anda definisikan.

Gunakan bidang maksud data:

  • Bila Anda hanya memiliki satu bagian informasi yang perlu dikirim ke aktivitas yang telah dimulai.
  • Bila informasi itu adalah lokasi data yang bisa dinyatakan dengan URI.

Ekstra maksud adalah untuk data arbitrer lainnya yang ingin Anda teruskan ke aktivitas yang telah dimulai. Ekstra maksud disimpan di objek Bundle sebagai pasangan kunci dan nilai. Bundle adalah peta, yang dioptimalkan untuk Android, dengan tombol berupa string, dan nilai-nilainya bisa berupa tipe objek atau primitif apa pun (objek harus mengimplementasikan antarmuka Parcelable). Untuk memasukkan data ke dalam ekstra maksud, Anda bisa menggunakan salah satu metode putExtra() kelas Intent, atau membuat bundel sendiri dan memasukkannya ke dalam maksud dengan putExtras().

Gunakan ekstra maksud:

  • Jika Anda ingin meneruskan lebih dari satu bagian informasi ke aktivitas yang telah dimulai.
  • Jika informasi yang ingin Anda teruskan tidak bisa dinyatakan melalui URI.

Data dan ekstra maksud tidak eksklusif; Anda bisa menggunakan data URI dan ekstra untuk informasi tambahan yang diperlukan aktivitas yang dimulai untuk memproses data dalam URI itu.

Tambahkan data ke maksud

Untuk menambahkan data ke maksud eksplisit dari aktivitas pembuatnya, buat objek maksud seperti yang Anda lakukan sebelumnya:

Intent messageIntent = new Intent(this, ShowMessageActivity.class);

Gunakan metode setData() bersama objek Uri untuk menambahkan URI itu ke maksud. Beberapa contoh penggunaan setData() bersama URI:

// A web page URL
messageIntent.setData(Uri.parse("http://www.google.com"));
// a Sample file URI
messageIntent.setData(Uri.fromFile(new File("/sdcard/sample.jpg")));
// A sample content: URI for your app's data model
messageIntent.setData(Uri.parse("content://mysample.provider/data"));
// Custom URI
messageIntent.setData(Uri.parse("custom:" + dataID + buttonId));

Perlu diingat bahwa bidang data hanya bisa berisi URI tunggal; jika Anda memanggil setData() beberapa kali, hanya nilai terakhir yang akan digunakan. Gunakan ekstra maksud untuk menyertakan informasi tambahan (termasuk URI.)

Setelah menambahkan data, Anda bisa memulai aktivitas dengan maksud seperti biasanya.

startActivity(messageIntent);

Tambahkan ekstra ke maksud

Untuk menambahkan ekstra maksud ke maksud eksplisit dari aktivitas pembuatnya:

  1. Tentukan kunci yang akan digunakan untuk informasi yang ingin dimasukkan ke dalam ekstra, atau definisikan sendiri. Setiap bagian informasi memerlukan kunci unik.
  2. Gunakan metode putExtra() untuk menambahkan pasangan kunci/nilai ke ekstra maksud. Secara opsional Anda bisa membuat objek Bundle, menambahkan data ke bundel, kemudian menambahkan bundel ke maksud.

Kelas Intent menyertakan sejumlah kunci ekstra maksud yang bisa digunakan, didefinisikan sebagai konstanta yang dimulai dengan kata EXTRA_. Misalnya, Anda bisa menggunakan Intent.EXTRA_EMAIL untuk menunjukkan larik alamat email (sebagai string), atau Intent.EXTRA_REFERRER untuk menetapkan informasi tentang aktivitas pembuat yang mengirim maksud tersebut.

Anda juga bisa mendefinisikan kunci ekstra maksud milik sendiri. Secara konvensional Anda mendefinisikan kunci ekstra maksud sebagai variabel-variabel statis dengan nama yang dimulai kata EXTRA_. Untuk menjamin kunci tersebut unik, nilai string kunci itu sendiri harus diawali dengan nama kelas yang benar-benar memenuhi syarat aplikasi. Misalnya:

public final static String EXTRA_MESSAGE = "com.example.mysampleapp.MESSAGE";
public final static String EXTRA_POSITION_X = "com.example.mysampleapp.X";
public final static String EXTRA_POSITION_Y = "com.example.mysampleapp.Y";

Buat objek maksud (jika belum ada):

Intent messageIntent = new Intent(this, ShowMessageActivity.class);

Gunakan metode putExtra() bersama kunci untuk memasukkan data ke dalam ekstra maksud. Kelas Intent mendefinisikan banyak metode putExtra() untuk jenis data yang berbeda:

messageIntent.putExtra(EXTRA_MESSAGE, "this is my message");
messageIntent.putExtra(EXTRA_POSITION_X, 100);
messageIntent.putExtra(EXTRA_POSITION_Y, 500);

Atau, Anda bisa membuat bundel baru dan mengisinya dengan ekstra maksud. Bundel mendefinisikan banyak metode "put" untuk jenis data primitif yang berbeda serta objek yang mengimplementasikan antarmuka Parcelable Android atau Serializable Java.

Bundle extras = new Bundle();
extras.putString(EXTRA_MESSAGE, "this is my message");
extras.putInt(EXTRA_POSITION_X, 100);
extras.putInt(EXTRA_POSITION_Y, 500);

Setelah Anda mengisi bundel tersebut, tambahkan ke maksud dengan metode putExtras() (perhatikan "s" di Extras):

messageIntent.putExtras(extras);

Mulai aktivitas dengan maksud seperti biasa:

startActivity(messageIntent);

Ambil data dari maksud di aktivitas yang dimulai

Bila Anda memulai aktivitas bersama maksud, aktivitas yang telah dimulai akan memiliki akses ke maksud dan data yang dimuatnya.

Untuk mengambil maksud yang digunakan untuk memulai aktivitas (atau komponen lain), gunakan metode getIntent():

Intent intent = getIntent();

Gunakan getData() untuk mendapatkan URI dari maksud itu:

Uri locationUri = getData();

Untuk mendapatkan ekstra dari maksud, Anda perlu mengetahui kunci untuk pasangan kunci/nilai. Anda bisa menggunakan ekstra Intent standar jika telah menggunakannya, atau bisa menggunakan kunci yang didefinisikan di aktivitas pembuatnya (jika didefinisikan sebagai publik.)

Gunakan salah satu metode getExtra() untuk mengekstrak data ekstra dari objek maksud:

String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
int positionX = intent.getIntExtra(MainActivity.EXTRA_POSITION_X);
int positionY = intent.getIntExtra(MainActivity.EXTRA_POSITION_Y);

Atau Anda bisa mendapatkan seluruh bundel ekstra dari maksud dan mengekstrak nilai dengan beragam metode Bundle:

Bundle extras = intent.getExtras();
String message = extras.getString(MainActivity.EXTRA_MESSAGE);

Mendapatkan data kembali dari aktivitas

Bila Anda memulai aktivitas bersama sebuah maksud, aktivitas pembuatnya akan dihentikan sementara, dan aktivitas baru tetap di layar hingga pengguna mengeklik tombol kembali, atau panggil metode finish() di handler klik atau fungsi lainnya yang mengakhiri keterlibatan pengguna pada aktivitas ini.

Kadang-kadang bila mengirim data ke aktivitas bersama sebuah maksud, Anda juga ingin mendapatkan kembali data dari maksud itu. Misalnya, Anda mungkin memulai aktivitas galeri foto yang memungkinkan pengguna memilih foto. Dalam hal ini aktivitas asli Anda perlu menerima informasi tentang foto yang dipilih pengguna dari aktivitas yang diluncurkan.

Untuk meluncurkan aktivitas baru dan mendapatkan kembali hasilnya, lakukan langkah-langkah berikut di aktivitas pembuatnya:

  1. Sebagai ganti meluncurkan aktivitas bersama startActivity(), panggil startActivityForResult() bersama maksud dan kode permintaan.
  2. Buat maksud baru di aktivitas yang diluncurkan dan tambahkan data yang dikembalikan ke maksud itu.
  3. Implementasikan onActivityResult() di aktivitas pembuatnya untuk memproses data yang dikembalikan.

Anda akan mempelajari tentang setiap langkah di bagian berikut ini.

Gunakan startActivityForResult() untuk meluncurkan aktivitas

Untuk mendapatkan kembali data dari aktivitas yang diluncurkan, mulailah aktivitas itu bersama metode startActivityForResult() sebagai ganti startActivity().

startActivityForResult(messageIntent, TEXT_REQUEST);

Metode startActivityForResult(), seperti startActivity(), mengambil argumen maksud yang berisi informasi tentang aktivitas yang diluncurkan dan data yang dikirim ke aktivitas itu. Akan tetapi, metode startActivityForResult() juga memerlukan kode permintaan.

Kode permintaan adalah integer yang mengidentifikasi permintaan dan bisa digunakan untuk membedakan hasil bila Anda memproses data yang dikembalikan. Misalnya, jika meluncurkan satu aktivitas untuk mengambil foto dan aktivitas lain untuk memilih foto dari galeri, Anda akan memerlukan kode permintaan yang berbeda untuk mengidentifikasi permintaan yang menjadi pemilik data yang dikembalikan.

Secara konvensional, Anda mendefinisikan kode permintaan sebagai variabel-variabel integer statis dengan nama yang menyertakan REQUEST. Gunakan integer yang berbeda untuk setiap kode. Misalnya:

public static final int PHOTO_REQUEST = 1;
public static final int PHOTO_PICK_REQUEST = 2;
public static final int TEXT_REQUEST = 3;

Kembalikan respons dari aktivitas yang diluncurkan

Data respons dari aktivitas yang diluncurkan kembali ke aktivitas pembuatnya akan dikirim dalam maksud, baik dalam data maupun ekstra. Anda membentuk maksud yang dikembalikan ini dan memasukkan data ke dalamnya menggunakan cara yang sangat mirip dengan yang Anda lakukan untuk maksud yang mengirimnya. Biasanya aktivitas yang diluncurkan akan memiliki metode onClick atau metode callback masukan pengguna lain yang Anda gunakan untuk memproses aksi pengguna dan menutup aktivitas. Di sini juga Anda membentuk respons.

Untuk mengembalikan data dari aktivitas yang diluncurkan, buat objek maksud kosong yang baru.

Intent returnIntent = new Intent();
Catatan: Untuk menghindari kebingungan atas data yang dikirim dengan data yang dikembalikan, gunakan objek maksud baru, bukan menggunakan kembali objek maksud pengirim asal.

Maksud hasil yang dikembalikan tidak memerlukan kelas atau nama komponen berakhir di tempat yang tepat. Sistem Android akan mengarahkan respons kembali ke aktivitas pembuatnya untuk Anda.

Tambahkan data atau ekstra ke maksud dengan cara sama seperti yang Anda lakukan pada maksud asal. Anda mungkin perlu mendefinisikan kunci untuk ekstra maksud yang dikembalikan pada awal kelas.

public final static String EXTRA_RETURN_MESSAGE =
    "com.example.mysampleapp.RETURN_MESSAGE";

Selanjutnya masukkan data yang dikembalikan ke maksud seperti biasa. Di sini, pesan yang dikembalikan adalah ekstra maksud dengan kunci EXTRA_RETURN_MESSAGE.

messageIntent.putExtra(EXTRA_RETURN_MESSAGE, mMessage);

Gunakan metode setResult() bersama kode respons dan maksud dengan data respons:

setResult(RESULT_OK,replyIntent);

Kode respons didefinisikan oleh kelas Activity, dan bisa berupa

  • RESULT_OK: permintaan berhasil.
  • RESULT_CANCELED: pengguna membatalkan operasi.
  • RESULT_FIRST_USER: untuk mendefinisikan kode hasil milik Anda.

Anda akan menggunakan kode hasil di aktivitas pembuatnya.

Terakhir, panggil finish() untuk menutup aktivitas dan melanjutkan aktivitas pembuatnya:

finish();

Baca data respons di onActivityResult()

Karena sekarang aktivitas yang diluncurkan telah mengirimkan data kembali ke aktivitas pembuatnya bersama maksud, aktivitas pertama itu harus menangani data tersebut. Untuk menangani data yang dikembalikan di aktivitas pembuatnya, implementasikan metode callback onActivityResult(). Inilah sebuah contoh sederhana.

public void onActivityResult(int requestCode, int resultCode,  Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == TEXT_REQUEST) {
        if (resultCode == RESULT_OK) {
            String reply =
                data.getStringExtra(SecondActivity.EXTRA_RETURN_MESSAGE);
                // process data
        }
    }
}

Tiga argumen untuk onActivityResult() berisi semua informasi yang Anda perlukan untuk menangani data yang dikembalikan.

  • Kode permintaan. Kode permintaan yang Anda setel saat meluncurkan aktivitas bersama startActivityForResult(). Jika Anda meluncurkan aktivitas yang berbeda untuk melakukan operasi yang berbeda, gunakan kode ini untuk mengidentifikasi data tertentu yang Anda dapatkan kembali.
  • Kode hasil: kode hasil yang disetel di aktivitas yang diluncurkan, biasanya salah satu dari RESULT_OK atau RESULT_CANCELED.
  • Data maksud. maksud berisi data yang dikembalikan dari aktivitas peluncur.

Metode contoh yang ditampilkan di atas menampilkan logika tipikal untuk menangani kode permintaan dan kode respons. Pengujian pertama adalah untuk permintaan TEXT_REQUEST, dan bahwa hasilnya adalah berhasil. Di dalam isi pengujian itu, ekstrak informasi yang dikembalikan dari maksud. Gunakan getData() untuk mendapatkan data maksud, atau getExtra() untuk mengambil nilai dari ekstra maksud bersama kunci tertentu.

Setiap aplikasi dengan kompleksitas apa pun yang Anda bangun akan menyertakan beberapa aktivitas, baik yang didesain dan diimplementasikan oleh Anda, maupun yang berpotensi di aplikasi lain. Karena pengguna Anda berpindah-pindah dalam aplikasi dan di antara aktivitas, navigasi yang konsisten menjadi semakin penting untuk pengalaman pengguna aplikasi. Beberapa hal lebih mengganggu pengguna daripada navigasi dasar yang berperilaku tidak konsisten dan tak terduga. Mendesain navigasi aplikasi Anda dengan bijak akan membuat penggunaan aplikasi tersebut bisa diprediksi dan bisa diandalkan pengguna.

Sistem Android mendukung dua bentuk strategi navigasi yang berbeda untuk aplikasi Anda.

  • Navigasi Sementara atau Kembali, yang disediakan melalui tombol kembali di perangkat, dan back-stack.
  • Navigasi leluhur, atau Naik, yang disediakan oleh Anda sebagai opsi di bilah aksi aplikasi.

Navigasi Kembali memungkinkan pengguna Anda untuk kembali ke aktivitas sebelumnya dengan mengetuk tombol kembali di perangkat Tombol kembali di perangkat  . Navigasi kembali juga disebut navigasi sementara karena tombol kembali menyusuri riwayat layar yang baru saja ditampilkan, dalam urutan kronologi terbalik.

Back-stack adalah serangkaian aktivitas yang telah dikunjungi pengguna dan bisa dikunjungi kembali oleh pengguna dengan tombol kembali. Setiap kali aktivitas baru dimulai, aktivitas akan didorong ke back-stack dan mengambil fokus pengguna. Aktivitas sebelumnya akan dihentikan, namun tetap tersedia di back-stack. Back-stack beroperasi berdasarkan mekanisme "masuk terakhir, keluar pertama", jadi bila pengguna selesai dengan aktivitas saat ini dan menekan tombol Kembali, aktivitas tersebut akan dimunculkan dari tumpukan (serta dimusnahkan) dan aktivitas sebelumnya dilanjutkan.

Karena aplikasi bisa memulai aktivitas baik di dalam maupun di luar satu aplikasi, back-stack berisi semua aktivitas yang telah diluncurkan oleh pengguna dalam urutan terbalik. Setiap kali pengguna menekan tombol Kembali, setiap aktivitas di tumpukan akan dimunculkan untuk membuka aktivitas sebelumnya, hingga pengguna kembali ke layar Utama. Back-stack aktivitas

Android menyediakan back-stack untuk setiap tugas. Tugas adalah konsep penyusunan semua aktivitas yang berinteraksi dengan pengguna saat melakukan operasi, baik di dalam aplikasi maupun di beberapa aplikasi. Sebagian besar tugas dimulai dari layar utama Android, dan mengetuk ikon aplikasi akan memulai tugas (serta back-stack baru) untuk aplikasi itu. Jika pengguna menggunakan aplikasi sebentar, mengetuk beranda, dan memulai aplikasi, aplikasi baru itu akan diluncurkan di tugasnya sendiri dan memiliki back-stack sendiri. Jika pengguna kembali ke aplikasi pertama, back-stack tugas pertama akan kembali. Menyusuri dengan tombol kembali hanya akan mengembalikan ke aktivitas di tugas saat ini, bukan untuk semua tugas yang berjalan pada perangkat. Android memungkinkan pengguna menyusuri berbagai tugas bersama ringkasan atau layar tugas saat ini, yang bisa diakses dengan tombol segi empat di sudut kanan bawah perangkat Tombol tugas perangkat . Layar Tugas Saat Ini

Dalam sebagian besar kasus, Anda tidak perlu khawatir tentang pengelolaan tugas atau back-stack untuk aplikasi—sistem terus melacak hal ini untuk Anda, dan tombol kembali selalu tersedia pada perangkat.

Akan tetapi, mungkin ada saatnya Anda ingin mengganti perilaku default untuk tugas atau untuk back-stack. Misalnya, jika layar Anda berisi browser web yang disematkan yang memungkinkan pengguna menyusuri laman web, Anda mungkin ingin menggunakan perilaku kembali default di browser bila pengguna menekan tombol Kembali di perangkat, daripada mengembalikan ke aktivitas sebelumnya. Anda mungkin juga perlu mengubah perilaku default aplikasi dalam kasus khusus lainnya seperti pada notifikasi atau widget, sehingga aktivitas yang berada jauh di dalam aplikasi Anda mungkin diluncurkan sebagai tugasnya sendiri, tanpa back-stack sama sekali. Anda akan mengetahui selengkapnya tentang pengelolaan tugas dan back-stack di bagian berikutnya.

Navigasi naik, kadang-kadang disebut sebagai navigasi leluhur atau logis, digunakan untuk navigasi dalam aplikasi berdasarkan hubungan hierarki eksplisit di antara layar. Dengan navigasi naik, aktivitas Anda disusun dalam suatu hierarki, dan aktivitas "anak" menampilkan panah hadap-kiri di bilah aksi Tombol naik (di bilah aksi) yang mengembalikan pengguna ke aktivitas "induk". Aktivitas teratas di hierarki biasanya adalah aktivitas utama Anda, dan pengguna tidak bisa naik lagi dari sana. Navigasi Naik

Misalnya, jika aktivitas utama di aplikasi email adalah daftar semua pesan, memilih sebuah pesan akan meluncurkan aktivitas kedua untuk menampilkan satu email itu. Dalam hal ini, aktivitas pesan akan menyediakan tombol Naik yang mengembalikan ke daftar pesan.

Perilaku tombol Naik didefinisikan oleh Anda di setiap aktivitas berdasarkan cara mendesain navigasi aplikasi. Dalam banyak kasus, navigasi Naik dan Kembali mungkin menyediakan perilaku yang sama: cuma mengembalikan ke aktivitas sebelumnya. Misalnya, aktivitas Setelan mungkin tersedia dari aktivitas apa pun di aplikasi Anda, sehingga "naik" sama dengan kembali -- cuma mengembalikan pengguna ke tempat sebelumnya di hierarki.

Menyediakan perilaku Naik untuk aplikasi Anda adalah hal yang opsional, namun praktik desain yang baik, adalah menyediakan navigasi yang konsisten untuk berbagai aktivitas di aplikasi Anda.

Implementasikan navigasi naik bersama aktivitas induk

Dengan proyek template standar di Android Studio, mudah untuk mengimplementasikan navigasi Naik. Jika satu aktivitas adalah anak aktivitas lain di hierarki aktivitas aplikasi, tetapkan induk aktivitas itu di Manifes Android.

Mulai di Android 4.1 (API level 16), deklarasikan induk logis setiap aktivitas dengan menetapkan atribut android:parentActivityName di elemen <activity> . Untuk mendukung Android versi lama, sertakan informasi <meta-data> untuk mendefinisikan aktivitas induk secara eksplisit. Gunakan kedua metode agar kompatibel mundur dengan semua versi Android.

Inilah definisi kerangka untuk kedua aktivitas utama (induk) dan aktivitas kedua (anak):

<application ... >
    <!-- The main/home activity (it has no parent activity) -->
         <activity
        android:name=".MainActivity" ...>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>
    <!-- A child of the main activity -->
    <activity android:name=".SecondActivity"
        android:label="@string/activity2_name"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.android.twoactivities.MainActivity" />
    </activity> 
</application>

Praktik terkait

Latihan terkait dan dokumentasi praktik ada di Dasar-Dasar Developer Android: Praktik.

Ketahui selengkapnya

results matching ""

    No results matching ""