Komponen activity Dosen: Maimun, S.T., M.T.
1. Activity Kegiatan apa yang akan ditampilkan dan dilakukan user pada sebuah window Berisi lifecycle / daur hidup saling berhubungan dari sebuah activity ke activity lainnya Bersifar Last In First Out (LIFO), activity terakhir masuk ke stack maka akan keluar lebih dahulu Layout activity berada pada file activity_main.xml Seluruh activity terlihat di AndroidManifest.xml /activity-lifecycle
Mekanisme LIFO 1. Aktivitas diluncurkan 2. Aktivitas dibentuk onCreate() 4. Aktivitas dimunculkan onResume() 5. Aktivitas 1 dijalankan masuk ke stack activity 3. Aktivitas dimulai onStart() 6. Aktivitas 1 ditunda onPause() bila tidak digunakan 8. Aktivitas 2 dimulai onRestart() 7. Aktivitas 1 dihentikan onStop() bila beralih ke aktivitas lain 9. Aktivitas 2 running 10. Aktivitas 2 masuk ke stack (Last In) 11. Aktivitas 2 selesai onDestroy() 12. Aktivitas 2 keluar (First Out) 13. Bila aktivitas 1 selesai shutdown Atau bila aktivitas 1 habis memory Killed Activity launched Activity Running App process killed Activity shut down onCreate() onStart() onResume( ) onDestroy onStop() onPause() onRestart() Activity1 Activity 2
Saving Activity State 1. Bila aktivitas mengalami pause/stop maka informasi tersimpan di Bundle onSaveInstanceState() 2. Aktivitas tak tak terlihat 3. Saat activity dimunculkan secara normal onRestart() 5.Kemudian Activity dipanggil kembali onRestoreInstanceState() atau Activity dibentuk kembali bila tidak ada di Bundle onCreate() 4.Bila aplikasi lain memerlukan memory maka secara prioritas activity onDestroy() contoh: pergantian layar, penampilan keyboard,
Aplikasi hitung volume balok 1. Buat layout aplikasi activity_main.xml <LinearLayout xmlns:android=" xmlns:app=" xmlns:tools=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.funtasiaapp.praktek1_namaanda.MainActivity"> LinearLayout=parent semua komponen view namespace menggunakan attribute dan tag dari android.com penanda format XML Mendefinisikan dimensi layar berdasarkan dimens.xml <TextView android:layout_width="match_parent" android:layout_height="wrap_content" TextView =menampilkan text ke layar match_parent = sesuai uk layar wrap_content = sesuai uk konten android:text = isi text android:layout_marginBottom= uk berdasarkan density pixel (dp)
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" android:lines="1" EditText = input teks android:id = memberikan identitas utk operasi logic di MainActivity.java inputType = tipe teks bil decimal android:lines = jumlah baris <Button android:layout_width="match_parent" android:layout_height="wrap_content" <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hasil" android:gravity="center" android:textSize="24sp" android:textStyle="bold" Button = memberikan aksi klik android:gravity = menempatkan text di tengah android:textSize = uk teks android:textStyle= style teks
2. Buat logika program MainActivity.java Belajar java di: package com.funtasiaapp.praktek1_namaanda; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private EditText edtWidth, edtHeight, edtLength; private Button btnCalculate; private TextView tvResult; Import attribute dan tag android public class = Mendefinisikan kelas Java activity bernama AppCompatActivity Implement View.OnClickListener = membaca Klik dan merubah warna saat dipilih Private = deklarasi komponen didalamnya untuk dimanipulas pada bagian kelas
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edtWidth = (EditText)findViewById(R.id.edt_width); edtLength = (EditText)findViewById(R.id.edt_length); edtHeight = (EditText)findViewById(R.id.edt_height); btnCalculate = (Button) findViewById(R.id.btn_calculate); tvResult=(TextView) findViewById(R.id.tv_result); btnCalculate.setOnClickListener(this); if(savedInstanceState !=null){ String hasil=savedInstanceState.getString(STATE_HASIL); tvResult.setText(hasil); } Metode onCreate = metode utama Deklarasi metode onCreate = inisialisasi komponen sesuai layout bersifat akses terbatas (protected) super.onCreate = memanggil metode onCreate() berdasarkan instance yang tersimpan di memori setContentView() = menampilkan layout activity_main.xml edtWidth, edtLength, edtHeight, btnCalculate dan tvResult mendefinisikan komponen EditText, Button, TextView dengan id layout btnCalculate.setOnClickListener() = objek button ini (this) terpasang onClickListener. savedInstanceState !=null bila informasi di Bundle tidak sama (!) kosong String hasil = nilai diambil di bundle dengan name STATE_HASIL tvResult.setText()=menampilkan hasil
@Override public void onClick(View v) { if (v.getId() == R.id.btn_calculate) { String length = edtLength.getText().toString().trim(); String width = edtWidth.getText().toString().trim(); String height = edtHeight.getText().toString().trim(); boolean isEmptyFields = false; if (TextUtils.isEmpty(length)) { isEmptyFields = true; edtLength.setError("Field ini tidak boleh kosong"); } if (TextUtils.isEmpty(width)) { isEmptyFields = true; edtWidth.setError("Field ini tidak boleh kosong"); } if (TextUtils.isEmpty(height)) { isEmptyFields = true; edtHeight.setError("Field ini tidak boleh kosong"); } if (!isEmptyFields) { double l = Double.parseDouble(length); double w = Double.parseDouble(width); double h = Double.parseDouble(height); double volume = l*w*h; tvResult.setText(String.valueOf(volume)); }} } Metode onClick Deklarasi metode onClick() = inisialisasi komponen string saat klik. String = Deklarasi length, width, height dalam karakter getText() = mengambil input Text toString() = merubah ke String trim() = memotong space Text booleanisEmptyFields = field tidak boleh kosong TextUtils.IsEmpty() = memeriksa value apakah kosong setError = menampilkan pesan error !isEmptyFields = ! Artinya tidak sama dengan Double.parseDouble = tipe data angka dalam 64bit termasuk koma tvResult.setText = mengatur tampilan teks String.valueOf(volume)) = berupa String bernilai volume
private static final String STATE_HASIL = protected void onSaveInstanceState(Bundle outState) { outState.putString(STATE_HASIL, tvResult.getText().toString()); super.onSaveInstanceState(outState); } Metode onSaveInstanceState private static final = deklarasi metode yang tidak dapat diubah (final) berasal dari nilai static dr metode lain dalam kelas yg sama (private). Protected void = data diakses terbatas onSaveInstanceState(Bundle outState) = metode penyimpanan pada Bundle outstate outstate.putString =memasukkan nilai string STATE_HASIL dari nilai string tvResult. super.onSaveInstanceState(outstate) = memanggil metode pada kelas Activity