Menampilkan Dialog Window - (1)

Terkadang kita perlu menampilkan suatu dialog window untuk mendapatkan konfirmasi dari user. Ada beberapa cara dalam menampilkan dialog window. Dalam latihan ini kita akan menggunakan 2 cara saja yaitu, cara 1) dengan menampilkan dialog window melalui acivity, dan cara 2) menampilkan dialog menggunakan FragmentDialog. Sayangnya, cara pertama meskipun masih bisa digunakan, sudah usang dan diperbarui sejak API level 13. Jadi sebagai alternatif yang lebih baru dan aman bisa digunakan cara kedua dalam post latihan berikutnya

Berikut di bawah ini adalah latihan menggunakan cara pertama:

1. Kita buat project baru di Android Studio dengan nama "Dialog".

2. Kita modifikassi file layout "activity_main.xml" seperti berikut:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.dialog.MainActivity">

<Button
android:id="@+id/btn_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click untuk menampilkan dialog"
android:onClick="onClick"/>
</LinearLayout>
3. Kita modifikasi file "MainActivity.java" seperti berikut:
package com.example.dialog;

import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

CharSequence[] items = {"Google", "Apple", "Microsoft"};
boolean[] itemsChecked = new boolean[items.length];

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

public void onClick(View v) {
showDialog(0);
}

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("Ini adalah dialog dengan teks sederhana...");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
Toast.makeText(getBaseContext(), "OK clicked!", Toast.LENGTH_SHORT).show();
}
});

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
Toast.makeText(getBaseContext(), "Cancel clicked!", Toast.LENGTH_SHORT).show();
}
});

builder.setMultiChoiceItems(items, itemsChecked, new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(getBaseContext(), items[which] + (isChecked ? " checked!":" unchecked!"),
Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
return null;
}
}
4. Kita jalankan di emulator Android Studio. Seharusnya kita akan melihat tampilan seperti berikut:

Dialog Window
Penjelasan

Untuk menampilkan dialog, pertama kita harus mengimplementasikan method 'onCreateDialog()' di dalam class 'AppCompatActivity':
@Override
protected Dialog onCreateDialog(int id) {
...
}
kemudian method ini dipanggil dengan method 'showDialog()':
public void onClick(View v) {
showDialog(0);
}
Method 'onCreateDialog()' adalah method untuk membuat dialog yang dikelola oleh 'activity'. Bila kita memanggil method 'showDialog()', method ini akan dipicu. Method 'showDialog() mengambil argumen integer untuk mengidentifikasi dialog tertentu untuk ditampilkan. Dalam hal ini, kita menggunakan kode "switch...case" untuk mengidentifikasi beberapa jenis dialog yang dibuat, meskipun dalam contoh ini hanya membuat satu dialog saja.

Untuk membuat dialog, kita menggunakan konstruktor dari class 'AlertDialog'. Kita bisa menetapkan berbagai macam properti seperti icon, title, dan button, maupun checkbox seperti berikut:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("Ini adalah dialog dengan teks sederhana...");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
Toast.makeText(getBaseContext(), "OK clicked!", Toast.LENGTH_SHORT).show();
}
});

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
Toast.makeText(getBaseContext(), "Cancel clicked!", Toast.LENGTH_SHORT).show();
}
});

builder.setMultiChoiceItems(items, itemsChecked, new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(getBaseContext(), items[which] + (isChecked ? " checked!":" unchecked!"),
Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
return null;
}
Pada kode di atas kita menetapkan dua tombol, 'OK' dan 'Cancel', dengan menggunakan method 'setPositiveButton()' dan 'setNegativeButton()' secara berturut-turut. Kita juga membuat daftar checkbox dengan method 'setMuktiChoiceItems()'. Untuk method 'setMultiChoiceItems()', kita melewatkan dua array, yaitu: daftar item yang ingin ditampilkan dan nilai dari masing-masing item, untuk menunjukkan apakah di-checked atau tidak. Bila suatu item di-checked, kita menggunakan class 'Toast' untuk menampilkan pesan bahwa item tersebut di-checked.

Catatan:
Di Android, kita seringkali menemui class 'Context' dan instansnya. Instans dari class 'Context' seringkali digunakan untuk memberikan referensi ke app kita. Misalnya, dalam potongan pendek berikut, parameter pertama dari class 'Toast' adalah object 'Context':
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
Toast.makeText(getBaseContext(), "OK clicked!", Toast.LENGTH_SHORT).show();
}
}
Tetapi, karena class 'Toast()' tidak digunakan langsung dalam activity (karena digunakan dalam class 'AlertDialog'), kita perlu mengembalikan instans dari class 'Context' dengan menggunakan method 'getBaseContext()'.

Kita juga menemui class 'Context' bila kita membuat suatu 'view' secara dinamis dalam suatu 'activity'. Misalnya, kita mungkin ingin membuat 'TextView' secara dinamis dengan kode. Untuk melakukan hal ini kita akan membuat instans class 'TextView' seperti berikut:
TextView tv = new TextView(this);
Konstruktor class 'TextView' mengambil object 'Context'; dan karena class 'Activity' adalah subclass 'Context', kita bisa menggunakan keyword 'this' untuk menyajikan object 'Context'

No comments: