Bagaimana Menangani Perubahan Orientasi Layar

Dari latihan sebelumnya kita sudah tahu bagaimana mengimplementasikan dua teknik untuk menyesuaikan perubahan orientasi layar. Mari kita cob jelajahi lebih dalam apa yang terjadi pada status activity saat ada perubahan orientasi layar.

Latihan berikut akan menunjukkan apa yang terjadi pada activity saat ada perubahan orientasi layar.

1. Kita buat project baru dan kita beri nama “Orientasi Layar”.

2. Kita modifikas dan tambahkan kode berikut dalam file “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="id.co.blogspot.diansano.orientasilayar.MainActivity">

<EditText
android:id="@+id/txtField"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
3. Kita modifikasi dan tambahkan kode berikut dalam file utama “MainActivity.java” seperti berikut: 
package id.co.blogspot.diansano.orientasilayar;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("StatusInfo", "onCreate");
}

@Override
public void onStart() {
Log.d("StatusInfo", "onStart");
super.onStart();
}

@Override
public void onResume() {
Log.d("StatusInfo", "onResume");
super.onResume();
}

@Override
public void onPause() {
Log.d("StatusInfo", "onPause");
super.onPause();
}

@Override
public void onStop() {
Log.d("StatusInfo", "onStop");
super.onStop();
}

@Override
public void onDestroy() {
Log.d("StatusInfo", "onDestroy");
super.onDestroy();
}

@Override
public void onRestart() {
Log.d("StatusInfo", "onRestart");
super.onRestart();
}
}
4. Kita jalankan di emulator Android Studio dan kemudian masukkan beberapa kata dalam kedua EditText tersebut seperti berikut:

5. Kemudian kita ubah menjadi Landscape. Kalau kita perhatikan teks pada EditText pertama masih ada tetapi teks pada EditText kedua kosong.

6. Kalau kita amati di jendela Log ketika saat activity muncul dan kemudian kita ubah orientasinya, kita akan melihat seperti berikut:
D/StatusInfo: onCreate
D/StatusInfo: onStart
D/StatusInfo: onResume

D/StatusInfo: onPause
D/StatusInfo: onStop
D/StatusInfo: onDestroy
D/StatusInfo: onCreate
D/StatusInfo: onStart
D/StatusInfo: onResume
Penjelasan

Dari output yang ada di Log kita bisa melihat bahwa saat ada perubahan orientasi, activity di-destroy:
D/StatusInfo: onPause
D/StatusInfo: onStop
D/StatusInfo: onDestroy 
Dan setelah itu di buat ulang: 
D/StatusInfo: onCreate
D/StatusInfo: onStart
D/StatusInfo: onResume
Jadi sangatlah penting untuk memahami perilaku activity ini karena kita perlu memastikan bahwa kita akan mengambil langkah-langkah yang benar untuk mempertahankan status activity kita sebelum mengalami perubahan orientasi layar. Misalnya, activity kita mungkin akan memiliki beberapa variabel yang berisi nilai-nilai yang diperlukan untuk menghitung sesuatu di dalam activity. Jadi kita harus menimpan status apapun yang kita perlu simpan di dalam method ‘onPause()’, yang akan selalu dijalankan setiap kali ada perubahan orientasi. Dalam post berikutnya kita akan membahas beberapa cara untuk menyimpan informasi status ini.

Hal penting lainnya untuk dipahami adalah bahwa hanya view-view yang memiliki id (yang disebut dalam atribut ‘android:id’) yang akan memiliki status yang tersimpan bila activity di-destroy. Misalnya, user mungkin akan mengubah orientasi dan teks di dalam EditText akan secara otomatis disimpan dan diambil kembali bila activity sudah dibuat ulang. Tetapi bila EditText tidak diberi id di dalam atribut ‘android:id’, activity tidak akan menyimpan teks yang ada di dalamnya.

No comments: