PRAKTIKUM MOBILE PROGRAMMING (Ujian Akhir Semester: Membuat Aplikasi Mobile dengan Android)
INFORMATIKA A 2008 ARLI RAMDHANI
208700773
ASEP MIFTAH H
208700776
ACHMAD AMIN N
208700745
AI NURPIANTI
208700758
ANNISA
208700767
JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI UIN SUNAN GUNUNG DJATI BANDUNG 2011
Aplikasi Reminder Catatan Harian
Aplikasi yang kelompok kami buat ini adalah sebuah aplikasi yang berfungsi sebagai pengingat catatan-catatan harian baik hal-hal yang telah dilakukan maupun agenda-agenda yang akan dilakakukan sehingga memudahkan pengguna dalam mengatur aktifitasnya sehariharinya. Aplikasi ini dibuat untuk memenuhi tugas ujian akhir semester pada mata kuliah Praktikum Mobile Programming. Berikut ini adalah dokumentasi tahapan pembuatannya:
I.
PERANCANGAN 1.1 Fitur-fitur dalam Aplikasi Aplikasi Reminder Catatan Harian ini memiliki fitur-fitur sebagai berikut:
Fitur untuk memasukan atau menyimpan catatan baru
Fitur untuk mengubah isi catatan
Fitur untuk menghapus catatan
Fitur untuk menampilkan daftar catatan
1.2 Menentukan Screen untuk Aplikasi Berdasarkan fitur-fitur yang ada dalam aplikasi, maka selanjutnya dapat ditentukan layar tampilan (screen) untuk aplikasi yang akan dibuat, yaitu:
Layar untuk startup
Layar untuk menu utama
Layar untuk halaman info
Layar untuk halaman help
Layar untuk menampilkan daftar catatan
Layar untuk menambah catatan baru
Layar untuk mengubah catatan
1.3 Perancangan Antarmuka 1. Rancangan antarmuka untuk tampilan awal
APLIKASI REMINDER CATATAN HARIAN Ayo...catat hal-hal yang telah Kita lakukan hari ini dan Hal-hal yang kita lakukan Untuk hari-hari berikutnya, Agar hidup kita penuh Perencanaan dan tanggung Jawab.
CatatanKu
Info
Help
Exit
Judul/Layar Startup
Menu, menggunakan List Menu
2. Rancangan antarmuka untuk tampilan menu Info ~Info Tentang Aplikasi~
Aplikasi Reminder Catatan Harian Ini dibuat sebagai tugas UAS dari Mata kuliah praktikum Mobile Programming. Selain itu aplikasi yang kelompok kami buat ini sebagai implementasi dari proses Pembelajaran mata kuliah Mobile Programming yang kami terima. Selebihnya semoga aplikasi ini bisa Bermanfaat.
Tombol untuk kembali ke layar sebelumnya
By : Informatika A 2008 – Arli Ramdhani, Ai Nurpianti, Achmad Amin N, Asep Miftah, Anisa
Kembali
Isi dari menu Info
3. Rancangan antarmuka untuk tampilan menu Help ~ Pentuk Penggunaan ~
Langkah-langkah untuk Menjalankan aplikasi ini adalah Sebagai berikut : 1. Pada tampilan Awal klik Menu, maka akan muncul Pilihan menu, diantaranya : Catatan, Info, Help, dan Exit.
Tombol untuk kembali ke layar sebelumnya Kembali
4. Rancangan antarmuka untuk tampilan menu Catatan
XX-XX-XXXX_xx.xx
Tambah
Ubah
Hapus
Kembali
Isi dari menu Help
5. Rancangan antarmuka untuk tampilan tambah dan ubah catatan
Tambah/Ubah Catatan Tanggal Jam Catatan
Simpan
6. Rancangan Database Field Id Tanggal Jam Catatan
Tipe data Int Teks Teks Teks
Batal
Keterangan PK,
II. CODING 2.1 Daftar Activity
awal.java
help.java
Catatan_Fungsi.java
info.java
CatatanListAdapter.java
splash.java
CatatanSQLHelper.java
simpan_ubah.java
DatabaseApps.java
2.2 Daftar Layout .xml
awal.xml
listitem.xml
help.xml
lisetview.xml
info.xml
splash.xml
inputdata.xml
2.3 Kode Program
awal.java
package uas.arli.dkk; import import import import import
android.app.Activity; android.content.Intent; android.os.Bundle; android.view.Menu; android.view.MenuItem;
public class awal extends Activity { Menu myMenu = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.awal); } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); this.myMenu = menu; addRegularMenuItems(menu); return true; } private void addRegularMenuItems(Menu menu){ int base=Menu.FIRST; // value is 1 MenuItem pilih = menu.add(base,base,base,"CatatanKu"); pilih.setIcon(R.drawable.catatan1); MenuItem info = menu.add(base,base+1,base+1,"Info"); info.setIcon(R.drawable.info); MenuItem help = menu.add(base,base+2,base+2,"Help"); help.setIcon(R.drawable.help); MenuItem exit = menu.add(base,base+3,base+3,"Exit"); exit.setIcon(R.drawable.exit); } public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == 1) { startActivity(new Intent(awal.this,DatabaseApps.class)); } else if (item.getItemId() == 2) { startActivity(new Intent(awal.this,info.class)); } else if (item.getItemId() == 3) { startActivity(new Intent(awal.this,help.class)); } else if (item.getItemId() == 4) { finish(); } return true; } }
Catatan_Fungsi.java
package uas.arli.dkk; import android.app.Activity; public class Catatan_Fungsi extends Activity{ long id; String tanggal; String jam; String catatan; boolean complete; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getTanggal() { return tanggal; } public void setTanggal(String tanggal) { this.tanggal = tanggal; } public String getJam() { return jam; } public void setJam(String jam) { this.jam = jam; } public String getCatatan() { return catatan; } public void setCatatan(String catatan) { this.catatan = catatan; } public boolean isComplete() { return complete; } public void setComplete(boolean complete) { this.complete = complete; } // ------------------------------------------public void toggleComplete() { complete = !complete; } }
CatatanListAdapter.java
package uas.arli.dkk; import import import import import import import import
java.util.ArrayList; android.content.Context; android.view.LayoutInflater; android.view.View; android.view.ViewGroup; android.widget.BaseAdapter; android.widget.CheckedTextView; android.widget.TextView;
public class CatatanListAdapter extends BaseAdapter { ArrayList
cust; Context context; public CatatanListAdapter(Context context, ArrayList custs) { super(); this.cust = custs; this.context = context; } public int getCount() { return cust.size(); } public Catatan_Fungsi getItem(int position) { return (null == cust) ? null : cust.get(position); } public long getItemId(int position) { return position; } public static class ViewHolder { public CheckedTextView tanggalView; public TextView idView; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; View vi = convertView; if (null == convertView) { LayoutInflater infalInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); vi = infalInflater.inflate(R.layout.listitem, null); holder = new ViewHolder(); holder.tanggalView = (CheckedTextView) vi.findViewById(R.id.txt_tanggal); holder.idView = (TextView) vi.findViewById(R.id.txt_id);
vi.setTag(holder); } else holder = (ViewHolder) vi.getTag(); String txtTanggal = cust.get(position).getTanggal()+"_"+cust.get(position).getJam(); String txtId = String.valueOf(cust.get(position).getId()); boolean check = cust.get(position).isComplete(); holder.tanggalView.setText(txtTanggal); holder.tanggalView.setChecked(check); holder.idView.setText(txtId); return vi; } public void forceReload() { notifyDataSetChanged(); } public void toggleDataCompleteAtPosition(int position) { Catatan_Fungsi cust = getItem(position); cust.toggleComplete(); notifyDataSetChanged(); } public Long[] removeCheckedCatatan() { ArrayList completedTasks = new ArrayList(); ArrayList completedIds = new ArrayList(); for (Catatan_Fungsi dtCust : cust) { if (dtCust.isComplete()) { completedTasks.add(dtCust); completedIds.add(dtCust.getId()); } } cust.removeAll(completedTasks); notifyDataSetChanged(); return completedIds.toArray(new Long[]{}); } public Catatan_Fungsi getCheckedCatatan() { Catatan_Fungsi newCust = new Catatan_Fungsi(); for (Catatan_Fungsi dtCust : cust) { if (dtCust.isComplete()) { newCust = dtCust; break; } } return newCust; } }
CatatanSQLHelper.java
package uas.arli.dkk; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class CatatanSQLHelper extends SQLiteOpenHelper { public static final String DB_NAME = "catatan_db"; public static final int VERSION = 1; public public public public public public
static static static static static static
final final final final final final
String String String String String String
TASKS_TABLE = "customer"; TASK_ID = "id"; TASK_TANGGAL = "tanggal"; TASK_JAM = "jam"; TASK_CATATAN = "catatan"; TASK_COMPLETE = "complete";
public CatatanSQLHelper(Context context) { super(context, DB_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { createTable(db); } private void createTable(SQLiteDatabase db) { db.execSQL("create table " + TASKS_TABLE + " ( " + TASK_ID + " integer primary key autoincrement not null, " + TASK_TANGGAL + " text, " + TASK_JAM + " text, " + TASK_CATATAN + " text, " + TASK_COMPLETE + " text " + ");" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
DatabaseApps.java
package uas.arli.dkk; import java.util.ArrayList; import import import import import import
android.app.Activity; android.content.Intent; android.database.sqlite.SQLiteDatabase; android.os.Bundle; android.view.View; android.view.View.OnClickListener;
import import import import import import import import
android.widget.AdapterView; android.widget.Button; android.widget.EditText; android.widget.ListView; android.widget.TextView; android.widget.Toast; android.widget.AdapterView.OnItemClickListener; android.widget.AdapterView.OnItemLongClickListener;
public class DatabaseApps extends Activity { ArrayList currentData; SQLiteDatabase database; CatatanListAdapter adapter; ListView list; CatatanSQLHelper helper; Catatan_Fungsi cust; Button btnSubmit, btnCancel; TextView txtTitle; EditText dtTanggal, dtJam, dtCatatan; simpan_ubah util; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listview); util = new simpan_ubah(this); list = (ListView) findViewById(R.id.list_data); CatatanSQLHelper helper = new CatatanSQLHelper(this); database = helper.getWritableDatabase(); currentData = new ArrayList(); // ---- load data ---currentData = util.loadData(); adapter = new CatatanListAdapter(this, currentData); list.setAdapter(adapter); list.setEmptyView(findViewById(R.id.list_empty)); list.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView> parent, View v, int position, long id) { adapter.toggleDataCompleteAtPosition(position); } }); list.setOnItemLongClickListener(new OnItemLongClickListener() { public boolean onItemLongClick(AdapterView> parent, View v, int position, long id) { Catatan_Fungsi c = adapter.getItem(position); util.onShowData(c, DatabaseApps.this); return false;
} }); // set button click onButtonClick(); } // ---------------------------------------------@Override protected void onResume() { super.onResume(); adapter.forceReload(); } // ----------------------------------------------public void onButtonClick() { Button btnAdd = (Button) findViewById(R.id.add_button); btnAdd.setOnClickListener(new OnClickListener() { public void onClick(View v) { onCreateWidgetData(1, new Catatan_Fungsi());
}
}); Button btnUpdate = (Button) findViewById(R.id.update_button); btnUpdate.setOnClickListener(new OnClickListener() { public void onClick(View v) { Catatan_Fungsi c = adapter.getCheckedCatatan(); if (!c.getTanggal().equals("")) onCreateWidgetData(2, c); else { Toast.makeText(DatabaseApps.this, "Harus centang satu", Toast.LENGTH_LONG).show(); } } }); Button btnDelete = (Button) findViewById(R.id.delete_button); btnDelete.setOnClickListener(new OnClickListener() { public void onClick(View v) { Catatan_Fungsi c = adapter.getCheckedCatatan(); onDeleteData(c.getId()); } }); Button btnExit = (Button) findViewById(R.id.exit_button); btnExit.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); android.os.Process.killProcess(android.os.Process.myPid()); } }); } public void onCreateWidgetData(int param, final Catatan_Fungsi getCust) { switch(param) { // add data new
case 1: widgetAdd(); break; // update existing data case 2: widgetUpdate(getCust); break; } } public void widgetAdd() { setContentView(R.layout.inputdata); txtTitle = (TextView) findViewById(R.id.txt_title); txtTitle.setText("Tambah Catatan"); btnSubmit = (Button) findViewById(R.id.submit_button); btnSubmit.setOnClickListener(new OnClickListener() { public void onClick(View v) { dtTanggal = (EditText) findViewById(R.id.data_tanggal); dtJam = (EditText) findViewById(R.id.data_jam); dtCatatan = (EditText) findViewById(R.id.data_catatan); if (dtTanggal.getText().length()<1 || dtJam.getText().length()<1 || dtCatatan.getText().length()<1) { Toast.makeText(DatabaseApps.this, "Periksa Masukan Data", Toast.LENGTH_SHORT).show(); } else { cust = new Catatan_Fungsi(); cust.setTanggal(dtTanggal.getText().toString()); cust.setJam(dtJam.getText().toString()); cust.setCatatan(dtCatatan.getText().toString()); cust.setComplete(false); util.onSaveData(cust); onCancel(); } } }); btnCancel = (Button) findViewById(R.id.cancel_button); btnCancel.setOnClickListener(new OnClickListener() { public void onClick(View v) { onCancel(); } }); }
public void widgetUpdate(final Catatan_Fungsi getCust) { setContentView(R.layout.inputdata); txtTitle = (TextView) findViewById(R.id.txt_title); txtTitle.setText("Ubah Catatan"); dtTanggal = (EditText) findViewById(R.id.data_tanggal); dtTanggal.setText(getCust.getTanggal());
dtJam = (EditText) findViewById(R.id.data_jam); dtJam.setText(getCust.getJam()); dtCatatan = (EditText) findViewById(R.id.data_catatan); dtCatatan.setText(getCust.getCatatan()); btnSubmit = (Button) findViewById(R.id.submit_button); btnSubmit.setOnClickListener(new OnClickListener() { public void onClick(View v) { dtTanggal = (EditText) findViewById(R.id.data_tanggal); dtJam = (EditText) findViewById(R.id.data_jam); dtCatatan = (EditText) findViewById(R.id.data_catatan); if (dtTanggal.getText().length()<1 || dtJam.getText().length()<1 || dtCatatan.getText().length()<1) { Toast.makeText(DatabaseApps.this, "Periksa Masukan Data", Toast.LENGTH_SHORT); } else { getCust.setTanggal(dtTanggal.getText().toString()); getCust.setJam(dtJam.getText().toString()); getCust.setCatatan(dtCatatan.getText().toString()); util.onUpdateData(getCust); onCancel(); } } }); btnCancel = (Button) findViewById(R.id.cancel_button); btnCancel.setOnClickListener(new OnClickListener() { public void onClick(View v) { onCancel(); } }); } public void onDeleteData(long id) { // Long[] ids = adapter.removeCheckedCustomer(); // deleteData(ids); deleteData(new Long[]{id}); currentData = util.loadData(); adapter = new CatatanListAdapter(this, currentData); list.setAdapter(adapter); } @SuppressWarnings("static-access") public void deleteData(Long[] ids) { StringBuffer idList = new StringBuffer(); for (int i =0; i< ids.length; i++) { idList.append(ids[i]); if (i < ids.length -1 ) { idList.append(","); } } String where = String.format("%s in (%s)", helper.TASK_ID, idList); database.delete(helper.TASKS_TABLE, where, null); }
public void onCancel() { Intent newIntent = new Intent().setClass(DatabaseApps.this, DatabaseApps.class); startActivity(newIntent); finish(); } // ----------------------------------------------}
help.java
package uas.arli.dkk; import android.app.Activity; import android.os.Bundle; import android.view.View; public class help extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.help); } public void backtoMenu(View view){ finish(); } }
info.java
package uas.arli.dkk; import android.app.Activity; import android.os.Bundle; import android.view.View; public class info extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.info); } public void backtoMenu(View view){ finish(); } }
splash.java
package uas.arli.dkk; import import import import import import import import import import
android.app.Activity; android.content.Intent; android.os.Bundle; android.view.animation.Animation; android.view.animation.AnimationUtils; android.view.animation.LayoutAnimationController; android.view.animation.Animation.AnimationListener; android.widget.TableLayout; android.widget.TableRow; android.widget.TextView;
public class splash extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); startAnimating(); } private void startAnimating() { // Animasi untuk top title TextView logo1 = (TextView) findViewById(R.id.TextViewTopTitle); Animation fade1 = AnimationUtils.loadAnimation(this, R.anim.fade_in1); logo1.startAnimation(fade1); // Animasi untuk bottom title. TextView logo2 = (TextView) findViewById(R.id.TextViewBottomTitle); Animation fade2 = AnimationUtils.loadAnimation(this, R.anim.fade_in2); logo2.startAnimation(fade2); // Beralih ke main menu jika animasi bottom title berakhir fade2.setAnimationListener(new AnimationListener() { public void onAnimationEnd(Animation animation) { // Animasi berakhir, untuk berpindah ke main menu screen startActivity(new Intent(splash.this, awal.class)); splash.this.finish(); } public void onAnimationRepeat(Animation animation) { } public void onAnimationStart(Animation animation) { } }); // Animasi untuk objek dalam TableLayout Animation spinin = AnimationUtils.loadAnimation(this, R.anim.custom_anim); LayoutAnimationController controller = new LayoutAnimationController(spinin); TableLayout table = (TableLayout) findViewById(R.id.TableLayout01); for (int i = 0; i < table.getChildCount(); i++) { TableRow row = (TableRow) table.getChildAt(i); row.setLayoutAnimation(controller); } } @Override
protected void onPause() { super.onPause(); //Animasi berhenti TextView logo1 = (TextView) findViewById(R.id.TextViewTopTitle); logo1.clearAnimation(); TextView logo2 = (TextView) findViewById(R.id.TextViewBottomTitle); logo2.clearAnimation(); TableLayout table = (TableLayout) findViewById(R.id.TableLayout01); for (int i = 0; i < table.getChildCount(); i++) { TableRow row = (TableRow) table.getChildAt(i); row.clearAnimation(); } } @Override protected void onResume() { super.onResume(); startAnimating(); } }
simpan_ubah.java
package uas.arli.dkk; import import import import import import import
java.util.ArrayList; android.app.AlertDialog; android.content.ContentValues; android.content.Context; android.content.DialogInterface; android.database.Cursor; android.database.sqlite.SQLiteDatabase;
public class simpan_ubah { CatatanSQLHelper helper; SQLiteDatabase database; public Utils(Context ctx) { helper = new CatatanSQLHelper(ctx); database = helper.getWritableDatabase(); } @SuppressWarnings("static-access") public ArrayList loadData() { ArrayList currentData = new ArrayList(); Cursor dataCursor = database.query(helper.TASKS_TABLE, new String[] {helper.TASK_ID, helper.TASK_TANGGAL, helper.TASK_JAM, helper.TASK_CATATAN, helper.TASK_COMPLETE}, null, null, null, null, String.format("%s, %s", helper.TASK_COMPLETE, helper.TASK_TANGGAL)); dataCursor.moveToFirst(); Catatan_Fungsi t; if ( !dataCursor.isAfterLast() ) {
do { int id = dataCursor.getInt(0); // coloum ID String tanggal = dataCursor.getString(1); // coloum tanggal String jam = dataCursor.getString(2); // coloum jam String catatan = dataCursor.getString(3); // coloum catatan String boolValue = dataCursor.getString(4); // coloum complete boolean complete = Boolean.parseBoolean(boolValue); t = new Catatan_Fungsi(); t.setId(id); t.setTanggal(tanggal); t.setJam(jam); t.setCatatan(catatan); t.setComplete(complete); currentData.add(t); } while(dataCursor.moveToNext()); } /* while (dataCursor.moveToNext()) { } */ dataCursor.close(); return currentData; } @SuppressWarnings("static-access") public void onSaveData(Catatan_Fungsi getCust) { assert (null != getCust); ContentValues values = new ContentValues(); values.put(helper.TASK_TANGGAL, getCust.getTanggal()); values.put(helper.TASK_JAM, getCust.getJam()); values.put(helper.TASK_CATATAN, getCust.getCatatan()); values.put(helper.TASK_COMPLETE, Boolean.toString(false)); getCust.setId(database.insert(helper.TASKS_TABLE, null, values)); } @SuppressWarnings("static-access") public void onUpdateData(Catatan_Fungsi getCust) { assert (null != getCust); ContentValues values = new ContentValues(); values.put(helper.TASK_TANGGAL, getCust.getTanggal()); values.put(helper.TASK_JAM, getCust.getJam()); values.put(helper.TASK_CATATAN, getCust.getCatatan()); values.put(helper.TASK_COMPLETE, Boolean.toString(getCust.isComplete())); long id = getCust.getId(); String where = String.format("%s = %d", helper.TASK_ID, id); database.update(helper.TASKS_TABLE, values, where, null); }
AlertDialog alert; public void onShowData(Catatan_Fungsi cust, Context ctx) { final Catatan_Fungsi thisCust = cust; alert = new AlertDialog.Builder(ctx).setIcon(R.drawable.icon) .setTitle("Display Data") .setMessage(" ------------ Customer -------------\n" + "ID: "+thisCust.getId()+"\n" + "Tanggal: "+thisCust.getTanggal()+"\n" + "Jam: "+thisCust.getJam()+"\n" + "Catatan: "+thisCust.getCatatan()+"\n") .setNegativeButton("Close", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { alert.cancel(); } }).create(); alert.show(); } }
awal.xml
android:gravity="top|center" android:textColor="#FFF" android:background="@android:drawable/toast_frame" android:textSize="8pt">
help.xml
<Button android:text="Kembali" android:id="@+id/btnBack" android:layout_width="100dip" android:layout_height="wrap_content" android:onClick="backtoMenu">
info.xml
android:layout_height="fill_parent" android:gravity="top|center" android:background="@drawable/bg"> <Button android:text="Kembali" android:id="@+id/btnBack" android:layout_width="100dip" android:layout_height="wrap_content" android:onClick="backtoMenu">
inputdata.xml
android:background="@drawable/bg"> <EditText android:id="@+id/data_tanggal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Tanggal"/> <EditText android:id="@+id/data_jam" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Jam" android:gravity="top"/> <EditText android:id="@+id/data_catatan" android:layout_width="fill_parent" android:layout_height="100px" android:singleLine="false" android:hint="Catatan" /> <Button android:id="@+id/submit_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Simpan" /> <Button android:id="@+id/cancel_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Batal" />
luaslingkaran.xml
<EditText android:text="" android:id="@+id/txtJari" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="numberSigned|numberDecimal"> <Button android:text="Hitung Luas" android:id="@+id/btnHitung" android:layout_width="130dip" android:layout_height="wrap_content" android:onClick="hitungLuas"> <EditText android:text="" android:id="@+id/txtLuas" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false"> <Button android:text="Kembali" android:id="@+id/btnBack" android:layout_width="100dip" android:layout_height="wrap_content" android:onClick="backtoMenu">
listitem.xml
lisetview.xml
<Button android:id="@+id/add_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Tambah"/> <Button android:id="@+id/update_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_toRightOf="@id/add_button"
android:text="Ubah"/> <Button android:id="@+id/delete_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_toRightOf="@id/update_button" android:text="Hapus"/> <Button android:id="@+id/exit_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_toRightOf="@id/delete_button" android:text="Kembali"/>
splash.xml
>
III. IMPLEMENTASI