Membuat Aplikasi CRUD SQLite dengan Content Provider dan Circular Reveal Animation di Android Part3
di part ke2 kita sudah membuat beberapa layout antarmuka aplikasi kita sekarang kita tinggal memberikan fungsi pada layout-layout kita tapi sebelum itu kita tambahkan lagi dua buah layout untuk activity_details dan settings_activity
1. buat layout dengan nama activity_employee_details
untuk menampilkan details employee kita, sebagai berikut:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.giviews.employee.EmployeeDetailsActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_setting"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:theme="@style/AppTheme.AppBarOverlay" />
<ScrollView
android:layout_marginTop="60dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:layout_height="match_parent">
<ImageView
android:id="@+id/profileImageView"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:background="#fff"
android:src="@drawable/ic_account_circle_black"/>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textStyle="bold"
android:textSize="15dp"
android:text="First Name" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_firstname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="15dp"
android:textStyle="bold"
android:layout_weight="1"
android:text="Last Name" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_lastname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:text="Title" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:textSize="15dp"
android:textStyle="bold"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Department" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_department"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:text="City" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_city"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:text="Phone" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:text="Email" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_email"
android:layout_weight="1"
android:text="Unknown"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="15dp"
android:textStyle="bold"
android:layout_weight="1"
android:text="Gender" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_gender"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.giviews.employee.EmployeeDetailsActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_setting"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:theme="@style/AppTheme.AppBarOverlay" />
<ScrollView
android:layout_marginTop="60dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:layout_height="match_parent">
<ImageView
android:id="@+id/profileImageView"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:background="#fff"
android:src="@drawable/ic_account_circle_black"/>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textStyle="bold"
android:textSize="15dp"
android:text="First Name" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_firstname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="15dp"
android:textStyle="bold"
android:layout_weight="1"
android:text="Last Name" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_lastname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:text="Title" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:textSize="15dp"
android:textStyle="bold"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Department" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_department"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:text="City" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_city"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:text="Phone" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:text="Email" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_email"
android:layout_weight="1"
android:text="Unknown"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:padding="16dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="15dp"
android:textStyle="bold"
android:layout_weight="1"
android:text="Gender" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/employee_gender"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Unknown" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>
2. buat layout dengan nama
activity_settings.xml dengan kode sebagai berikut, activity ini akan digunakan
untuk memilih warna thema pada aplikasi CRUD kita.
3. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.giviews.employee.EmployeeDetailsActivity"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar_setting" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" android:theme="@style/AppTheme.AppBarOverlay" /> <ScrollView android:layout_marginTop="60dp" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/root_layout" android:layout_width="match_parent" android:orientation="vertical" android:padding="16dp" android:layout_height="match_parent"> <ImageView android:id="@+id/profileImageView" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center" android:layout_marginBottom="10dp" android:background="#fff" android:src="@drawable/ic_account_circle_black"/> <LinearLayout android:padding="16dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textStyle="bold" android:textSize="15dp" android:text="First Name" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/employee_firstname" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Unknown" /> </LinearLayout> <LinearLayout android:padding="16dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:textSize="15dp" android:textStyle="bold" android:layout_weight="1" android:text="Last Name" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/employee_lastname" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Unknown" /> </LinearLayout> <LinearLayout android:padding="16dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="15dp" android:textStyle="bold" android:text="Title" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/employee_title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Unknown" /> </LinearLayout> <LinearLayout android:padding="16dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatTextView android:layout_width="0dp" android:textSize="15dp" android:textStyle="bold" android:layout_height="wrap_content" android:layout_weight="1" android:text="Department" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/employee_department" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Unknown" /> </LinearLayout> <LinearLayout android:padding="16dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="15dp" android:textStyle="bold" android:text="City" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/employee_city" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Unknown" /> </LinearLayout> <LinearLayout android:padding="16dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="15dp" android:textStyle="bold" android:text="Phone" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/employee_phone" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Unknown" /> </LinearLayout> <LinearLayout android:padding="16dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="15dp" android:textStyle="bold" android:text="Email" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/employee_email" android:layout_weight="1" android:text="Unknown" android:layout_width="0dp" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:padding="16dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:textSize="15dp" android:textStyle="bold" android:layout_weight="1" android:text="Gender" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/employee_gender" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Unknown" /> </LinearLayout> </LinearLayout> </ScrollView> </RelativeLayout>
Sekarang tinggal java nya, buat class dengan nama EmployeeActivity dan
masukan kode berikut:
package com.giviews.employee; import android.annotation.TargetApi; import android.app.LoaderManager; import android.app.SearchManager; import android.content.ContentUris; import android.content.Context; import android.content.CursorLoader; import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.graphics.Rect; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import com.giviews.employee.data.EmployeeContract; import com.giviews.employee.data.EmployeeDbHelper; import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; public class EmployeeActivity extends AppCompatActivity implements SearchView.OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor>{ // EmployeeDbHelper employeeDbHelper; private static final int EMPLOYEE_LOADER = 0; EmployeeCursorAdapter mCursorAdapter; @BindView(R.id.fab) FloatingActionButton button; public EmployeeActivity(){ } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_employee); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_setting); setSupportActionBar(toolbar); toolbar.setBackgroundColor(Constant.color); //Setup FAB ButterKnife.bind(this); findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getApplicationContext(), EmployeeEditor.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); intent.putExtra(EmployeeEditor.EXTRA_RECT, createRect(button)); startActivity(intent); } }); ListView employeeListView = (ListView) findViewById(R.id.list); View emptyView = findViewById(R.id.empty_view); employeeListView.setEmptyView(emptyView); mCursorAdapter = new EmployeeCursorAdapter(this, null); employeeListView.setAdapter(mCursorAdapter); //TODO employeeListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { Intent intent = new Intent(getApplicationContext(), EmployeeDetailsActivity.class); Uri currentEmployeeUri = ContentUris.withAppendedId(EmployeeContract.EmployeeEntry.CONTENT_URI, id); intent.setData(currentEmployeeUri); intent.putExtra(EmployeeEditor.EXTRA_RECT, createRect(button)); startActivity(intent); } }); employeeListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) { Intent intent = new Intent(EmployeeActivity.this, EmployeeEditor.class); Uri currentEmployeeUri = ContentUris.withAppendedId(EmployeeContract.EmployeeEntry.CONTENT_URI, id); intent.setData(currentEmployeeUri); intent.putExtra(EmployeeEditor.EXTRA_RECT, createRect(button)); startActivity(intent); return true; } }); getLoaderManager().initLoader(EMPLOYEE_LOADER, null, this); // employeeDbHelper = new EmployeeDbHelper(this); } private Rect createRect(View view) { Rect rect = new Rect(); view.getDrawingRect(rect); ((ViewGroup) view.getParent()).offsetDescendantRectToMyCoords(view, rect); return rect; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_catalog, menu); MenuItem search = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(search); searchView.setOnQueryTextListener(this); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.action_search: onSearchRequested(); return true; case R.id.setting: startActivity(new Intent(getApplicationContext(), SettingsActivity.class)); return true; default: return false; } } @Override public Loader<Cursor> onCreateLoader(int i, Bundle bundle) { String[] projection = { EmployeeContract.EmployeeEntry._ID, EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME, EmployeeContract.EmployeeEntry.COLUMN_LASTNAME, EmployeeContract.EmployeeEntry.COLUMN_TITLE, EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT, EmployeeContract.EmployeeEntry.COLUMN_CITY, EmployeeContract.EmployeeEntry.COLUMN_PHONE, EmployeeContract.EmployeeEntry.COLUMN_IMAGE, EmployeeContract.EmployeeEntry.COLUMN_EMAIL, }; return new CursorLoader(this, EmployeeContract.EmployeeEntry.CONTENT_URI, projection, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { mCursorAdapter.swapCursor(cursor); } @Override public void onLoaderReset(Loader<Cursor> loader) { mCursorAdapter.swapCursor(null); } @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { newText = newText.toLowerCase(); ArrayList<Cursor> newList = new ArrayList<>(); return true; } }
selanjutnya buat lagi class dengan nama EmployeeCursorAdapter dengan
kode seperti berikut:
package com.giviews.employee; import android.content.Context; import android.database.Cursor; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.TextView; import com.giviews.employee.data.EmployeeContract; /** * Created by asus on 27/10/2017. */ class EmployeeCursorAdapter extends CursorAdapter{ public EmployeeCursorAdapter(Context context, Cursor c) { super(context, c, 0); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return LayoutInflater.from(context).inflate(R.layout.list_item, parent, false); } @Override public void bindView(View view, Context context, Cursor cursor) { TextView firstnameTextView = (TextView) view.findViewById(R.id.firstname); TextView lastnameTextView = (TextView) view.findViewById(R.id.lastname); TextView titleTextView = (TextView) view.findViewById(R.id.titleview); int firstnameColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME); int lastnameColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_LASTNAME); int titleColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_TITLE); String employeeFirstName = cursor.getString(firstnameColumnIndex); String employeeLastName = cursor.getString(lastnameColumnIndex); String employeeTitle = cursor.getString(titleColumnIndex); if (TextUtils.isEmpty(employeeFirstName)) { employeeFirstName = "Unknown"; } if (TextUtils.isEmpty(employeeLastName)) { employeeLastName = "Unknown"; } if (TextUtils.isEmpty(employeeTitle)) { employeeTitle = "Unknown"; } firstnameTextView.setText(employeeFirstName); lastnameTextView.setText(employeeLastName); titleTextView.setText(employeeTitle); } }
Selanjutnya buat lagi class dengan nama EmployeeEditor dan masukan kode
berikut:
package com.giviews.employee;
import android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.AlertDialog;
import android.app.LoaderManager;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.CursorLoader;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.Loader;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NavUtils;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.giviews.employee.data.EmployeeContract;
import com.hendraanggrian.bundler.BindExtra;
import com.hendraanggrian.bundler.Bundler;
import com.hendraanggrian.kota.content.Themes;
import com.hendraanggrian.reveallayout.Radius;
import com.hendraanggrian.reveallayout.RevealableLayout;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import butterknife.BindView;
import butterknife.ButterKnife;
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
public class EmployeeEditor extends AppCompatActivity implements View.OnClickListener, LoaderManager.LoaderCallbacks<Cursor>{
private static final int EXISTING_EMPLOYEE_LOADER = 0;
private Uri mCurrentEmployeeUri;
private EditText mFirstNameEditText;
private EditText mLastNameEditText;
private EditText mTitleEditText;
private EditText mDepartment;
private EditText mCity;
private EditText mPhone;
private EditText mEmail;
private Spinner mGenderSpinner;
private int mGender = EmployeeContract.EmployeeEntry.GENDER_UNKNOWN;
private ImageView profileImageView;
private Button pickImage;
private static final int SELECT_PHOTO = 1;
private static final int CAPTURE_PHOTO = 2;
//TODO
public static final int MEDIA_TYPE_IMAGE = 1;
private static final String IMAGE_DIRECTORY_NAME = "KAMERA";
private Uri fileUri;
private ProgressDialog progressBar;
private int progressBarStatus = 0;
private Handler progressBarHandler = new Handler();
private boolean hasImageChanges = false;
Bitmap thumbnail;
private boolean mEmployeeHasChanged = false;
View rootLayout;
public static final String EXTRA_RECT = "com.giviews.employee";
@BindExtra(EXTRA_RECT)
Rect rect;
@BindView(R.id.revealLayout)
RevealableLayout revealLayout;
@BindView(R.id.root_layout)
ViewGroup layout;
private View.OnTouchListener mTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
mEmployeeHasChanged = true;
return false;
}
};
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editor);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_setting);
setSupportActionBar(toolbar);
toolbar.setBackgroundColor(Constant.color);
Bundler.bindExtras(this);
ButterKnife.bind(this);
//TODO
Intent intent = getIntent();
mCurrentEmployeeUri = intent.getData();
if (mCurrentEmployeeUri == null) {
setTitle("Add an Employee");
invalidateOptionsMenu();
}else {
setTitle("Edit Employee");
getLoaderManager().initLoader(EXISTING_EMPLOYEE_LOADER, null, this);
}
mFirstNameEditText = (EditText) findViewById(R.id.firstName);
mLastNameEditText = (EditText) findViewById(R.id.lastName);
mTitleEditText = (EditText) findViewById(R.id.title);
mDepartment = (EditText) findViewById(R.id.department);
mCity = (EditText) findViewById(R.id.city);
mPhone = (EditText) findViewById(R.id.phone);
mEmail = (EditText) findViewById(R.id.email);
mGenderSpinner = (Spinner) findViewById(R.id.spinner_gender);
mFirstNameEditText.setOnTouchListener(mTouchListener);
mLastNameEditText.setOnTouchListener(mTouchListener);
mTitleEditText.setOnTouchListener(mTouchListener);
mDepartment.setOnTouchListener(mTouchListener);
mCity.setOnTouchListener(mTouchListener);
mPhone.setOnTouchListener(mTouchListener);
mEmail.setOnTouchListener(mTouchListener);
mGenderSpinner.setOnTouchListener(mTouchListener);
setupSpinner();
rootLayout = findViewById(R.id.root_layout);
layout.post(new Runnable() {
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
@Override
public void run() {
Animator animator = revealLayout.reveal(layout, rect.centerX(), rect.centerY(), Radius.GONE_ACTIVITY);
animator.setDuration(1000);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setStatusBarColor(Themes.getColor(getTheme(), R.attr.colorAccent, true));
}
}
});
animator.start();
}
});
//TODO
profileImageView = (ImageView) findViewById(R.id.profileImageView);
pickImage = (Button) findViewById(R.id.pickImage);
pickImage.setOnClickListener(this);
if (ContextCompat.checkSelfPermission(EmployeeEditor.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
profileImageView.setEnabled(false);
ActivityCompat.requestPermissions(EmployeeEditor.this, new String[]{ Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
}else {
profileImageView.setEnabled(true);
}
}
private void setupSpinner() {
ArrayAdapter genderSpinnerAdapter = ArrayAdapter.createFromResource(this,R.array.array_gender_options, android.R.layout.simple_spinner_item);
genderSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
mGenderSpinner.setAdapter(genderSpinnerAdapter);
mGenderSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selection = (String) parent.getItemAtPosition(position);
if (!TextUtils.isEmpty(selection)){
if (selection.equals(getString(R.string.gender_male))){
mGender = EmployeeContract.EmployeeEntry.GENDER_MALE;
}else if (selection.equals(getString(R.string.gender_female))) {
mGender = EmployeeContract.EmployeeEntry.GENDER_FEMALE;
}else {
mGender = EmployeeContract.EmployeeEntry.GENDER_UNKNOWN;
}
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
mGender = EmployeeContract.EmployeeEntry.GENDER_UNKNOWN;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_editor, menu);
if (mCurrentEmployeeUri == null) {
MenuItem menuItem = menu.findItem(R.id.action_delete);
menuItem.setVisible(false);
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_save:
saveEmployee();
finish();
return true;
case R.id.action_delete:
showDeleteConfirmationDialog();
return true;
case android.R.id.home:
if (!mEmployeeHasChanged) {
NavUtils.navigateUpFromSameTask(EmployeeEditor.this);
return true;
}
DialogInterface.OnClickListener discardButtonClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
NavUtils.navigateUpFromSameTask(EmployeeEditor.this);
}
};
showUnSavedChangesDialog(discardButtonClickListener);
return true;
}
return super.onOptionsItemSelected(item);
}
private void saveEmployee() {
String firstnameString = mFirstNameEditText.getText().toString().trim();
String lastnameString = mLastNameEditText.getText().toString().trim();
String titleString = mTitleEditText.getText().toString().trim();
String departmentString = mDepartment.getText().toString().trim();
String cityString = mCity.getText().toString().trim();
String phoneString = mPhone.getText().toString().trim();
String emailString = mEmail.getText().toString().trim();
profileImageView.setDrawingCacheEnabled(true);
profileImageView.buildDrawingCache();
Bitmap bitmap = profileImageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
if (mCurrentEmployeeUri == null &&
TextUtils.isEmpty(firstnameString) && TextUtils.isEmpty(lastnameString) &&
TextUtils.isEmpty(titleString) && TextUtils.isEmpty(departmentString) &&
TextUtils.isEmpty(cityString) && TextUtils.isEmpty(phoneString) &&
TextUtils.isEmpty(emailString) && mGender == EmployeeContract.EmployeeEntry.GENDER_UNKNOWN) {
return;
}
ContentValues values = new ContentValues();
values.put(EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME, firstnameString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_LASTNAME, lastnameString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_TITLE, titleString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT, departmentString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_CITY, cityString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_PHONE, phoneString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_IMAGE, data);
values.put(EmployeeContract.EmployeeEntry.COLUMN_EMAIL, emailString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_EMPLOYEE_GENDER, mGender);
if (mCurrentEmployeeUri == null) {
Uri newUri = getContentResolver().insert(EmployeeContract.EmployeeEntry.CONTENT_URI, values);
if (newUri == null) {
Toast.makeText(this, "Error with saving Employee", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "Employee saved", Toast.LENGTH_SHORT).show();
}
}else {
int rowAffected = getContentResolver().update(mCurrentEmployeeUri, values, null, null);
if (rowAffected == 0) {
Toast.makeText(getApplicationContext(), "Error with updating employee", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getApplicationContext(), "Employee updated", Toast.LENGTH_SHORT).show();
}
}
}
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
String[] projection = {
EmployeeContract.EmployeeEntry._ID,
EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME,
EmployeeContract.EmployeeEntry.COLUMN_LASTNAME,
EmployeeContract.EmployeeEntry.COLUMN_TITLE,
EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT,
EmployeeContract.EmployeeEntry.COLUMN_CITY,
EmployeeContract.EmployeeEntry.COLUMN_PHONE,
EmployeeContract.EmployeeEntry.COLUMN_IMAGE,
EmployeeContract.EmployeeEntry.COLUMN_EMAIL,
EmployeeContract.EmployeeEntry.COLUMN_EMPLOYEE_GENDER,
};
return new CursorLoader(this,
mCurrentEmployeeUri,
projection,
null,
null,
null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if (cursor == null || cursor.getCount() < 1) {
return;
}
if (cursor.moveToFirst()) {
int firstnameColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME);
int lastnameColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_LASTNAME);
int titleColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_TITLE);
int departmentColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT);
int cityColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_CITY);
int phoneColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_PHONE);
int imageColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_IMAGE);
int emailColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_EMAIL);
int genderColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_EMPLOYEE_GENDER);
String firstName = cursor.getString(firstnameColumnIndex);
String lastName = cursor.getString(lastnameColumnIndex);
String title = cursor.getString(titleColumnIndex);
String department = cursor.getString(departmentColumnIndex);
String city = cursor.getString(cityColumnIndex);
String phone = cursor.getString(phoneColumnIndex);
byte[] image = cursor.getBlob(imageColumnIndex);
String email = cursor.getString(emailColumnIndex);
int gender = cursor.getInt(genderColumnIndex);
mFirstNameEditText.setText(firstName);
mLastNameEditText.setText(lastName);
mTitleEditText.setText(title);
mDepartment.setText(department);
mCity.setText(city);
mPhone.setText(phone);
Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length);
profileImageView.setImageBitmap(Bitmap.createScaledBitmap(bmp, 200, 200, false));
mEmail.setText(email);
switch (gender) {
case EmployeeContract.EmployeeEntry.GENDER_MALE:
mGenderSpinner.setSelection(1);
break;
case EmployeeContract.EmployeeEntry.GENDER_FEMALE:
mGenderSpinner.setSelection(2);
break;
default:
mGenderSpinner.setSelection(0);
break;
}
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mFirstNameEditText.setText("");
mLastNameEditText.setText("");
mTitleEditText.setText("");
mDepartment.setText("");
mCity.setText("");
mPhone.setText("");
mEmail.setText("");
mGenderSpinner.setSelection(0);
}
private void showUnSavedChangesDialog(DialogInterface.OnClickListener discardButtonClickListener) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Discard your changes and quit editing?");
builder.setPositiveButton("Discard", discardButtonClickListener);
builder.setNegativeButton("Keep Editing", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if (dialog != null) {
dialog.dismiss();
}
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
private void showDeleteConfirmationDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Delete this Employee?");
builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
deleteEmployee();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if (dialog != null){
dialog.dismiss();
}
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
private void deleteEmployee() {
if (mCurrentEmployeeUri != null){
int rowsDeleted = getContentResolver().delete(mCurrentEmployeeUri,null, null);
if (rowsDeleted == 0) {
Toast.makeText(this, "Error with deleteing employee", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "Employee deleted", Toast.LENGTH_SHORT).show();
}
}
finish();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.pickImage:
new MaterialDialog.Builder(this)
.title("set your image")
.items(R.array.upload_images)
.itemsIds(R.array.itemIds)
.itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
switch (which) {
case 0:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
break;
case 1:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_PHOTO);
break;
case 2:
profileImageView.setImageResource(R.drawable.ic_account_circle_black);
break;
}
}
})
.show();
break;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 0){
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
profileImageView.setEnabled(true);
}
}
}
public void setProgressBar(){
progressBar = new ProgressDialog(this);
progressBar.setCancelable(true);
progressBar.setMessage("Please wait....");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
progressBarStatus = 0;
new Thread(new Runnable() {
@Override
public void run() {
while (progressBarStatus < 100) {
progressBarStatus += 30;
try {
Thread.sleep(1000);
}catch (InterruptedException e) {
e.printStackTrace();
}
progressBarHandler.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(progressBarStatus);
}
});
}
if (progressBarStatus >= 100){
try {
Thread.sleep(2000);
}catch (InterruptedException e){
e.printStackTrace();
}
progressBar.dismiss();
}
}
}).start();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_PHOTO) {
if (resultCode == RESULT_OK) {
try {
final Uri imageUri = data.getData();
final InputStream imageStream = getContentResolver().openInputStream(imageUri);
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
setProgressBar();
profileImageView.setImageBitmap(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}else if (requestCode == CAPTURE_PHOTO){
if (resultCode == RESULT_OK) {
onCaptureImageResult();
}
}
}
}
private void onCaptureImageResult() {
try {
// thumbnail = (Bitmap) data.getExtras().get("data");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
thumbnail = BitmapFactory.decodeFile(fileUri.getPath(), options);
setProgressBar();
// profileImageView.setMaxWidth(200);
profileImageView.setImageBitmap(thumbnail);
}catch (NullPointerException e) {
e.printStackTrace();
}
}
public Uri getOutputMediaFileUri(int type) {
return Uri.fromFile(getOutputMediaFile(type));
}
private File getOutputMediaFile(int type) {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
IMAGE_DIRECTORY_NAME);
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(IMAGE_DIRECTORY_NAME, "Ooops! Failed create"
+ IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
String timeStamp;
timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmsss",
Locale.getDefault()).format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
}else {
return null;
}
return mediaFile;
}
}
import android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.AlertDialog;
import android.app.LoaderManager;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.CursorLoader;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.Loader;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NavUtils;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.giviews.employee.data.EmployeeContract;
import com.hendraanggrian.bundler.BindExtra;
import com.hendraanggrian.bundler.Bundler;
import com.hendraanggrian.kota.content.Themes;
import com.hendraanggrian.reveallayout.Radius;
import com.hendraanggrian.reveallayout.RevealableLayout;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import butterknife.BindView;
import butterknife.ButterKnife;
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
public class EmployeeEditor extends AppCompatActivity implements View.OnClickListener, LoaderManager.LoaderCallbacks<Cursor>{
private static final int EXISTING_EMPLOYEE_LOADER = 0;
private Uri mCurrentEmployeeUri;
private EditText mFirstNameEditText;
private EditText mLastNameEditText;
private EditText mTitleEditText;
private EditText mDepartment;
private EditText mCity;
private EditText mPhone;
private EditText mEmail;
private Spinner mGenderSpinner;
private int mGender = EmployeeContract.EmployeeEntry.GENDER_UNKNOWN;
private ImageView profileImageView;
private Button pickImage;
private static final int SELECT_PHOTO = 1;
private static final int CAPTURE_PHOTO = 2;
//TODO
public static final int MEDIA_TYPE_IMAGE = 1;
private static final String IMAGE_DIRECTORY_NAME = "KAMERA";
private Uri fileUri;
private ProgressDialog progressBar;
private int progressBarStatus = 0;
private Handler progressBarHandler = new Handler();
private boolean hasImageChanges = false;
Bitmap thumbnail;
private boolean mEmployeeHasChanged = false;
View rootLayout;
public static final String EXTRA_RECT = "com.giviews.employee";
@BindExtra(EXTRA_RECT)
Rect rect;
@BindView(R.id.revealLayout)
RevealableLayout revealLayout;
@BindView(R.id.root_layout)
ViewGroup layout;
private View.OnTouchListener mTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
mEmployeeHasChanged = true;
return false;
}
};
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editor);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_setting);
setSupportActionBar(toolbar);
toolbar.setBackgroundColor(Constant.color);
Bundler.bindExtras(this);
ButterKnife.bind(this);
//TODO
Intent intent = getIntent();
mCurrentEmployeeUri = intent.getData();
if (mCurrentEmployeeUri == null) {
setTitle("Add an Employee");
invalidateOptionsMenu();
}else {
setTitle("Edit Employee");
getLoaderManager().initLoader(EXISTING_EMPLOYEE_LOADER, null, this);
}
mFirstNameEditText = (EditText) findViewById(R.id.firstName);
mLastNameEditText = (EditText) findViewById(R.id.lastName);
mTitleEditText = (EditText) findViewById(R.id.title);
mDepartment = (EditText) findViewById(R.id.department);
mCity = (EditText) findViewById(R.id.city);
mPhone = (EditText) findViewById(R.id.phone);
mEmail = (EditText) findViewById(R.id.email);
mGenderSpinner = (Spinner) findViewById(R.id.spinner_gender);
mFirstNameEditText.setOnTouchListener(mTouchListener);
mLastNameEditText.setOnTouchListener(mTouchListener);
mTitleEditText.setOnTouchListener(mTouchListener);
mDepartment.setOnTouchListener(mTouchListener);
mCity.setOnTouchListener(mTouchListener);
mPhone.setOnTouchListener(mTouchListener);
mEmail.setOnTouchListener(mTouchListener);
mGenderSpinner.setOnTouchListener(mTouchListener);
setupSpinner();
rootLayout = findViewById(R.id.root_layout);
layout.post(new Runnable() {
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
@Override
public void run() {
Animator animator = revealLayout.reveal(layout, rect.centerX(), rect.centerY(), Radius.GONE_ACTIVITY);
animator.setDuration(1000);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setStatusBarColor(Themes.getColor(getTheme(), R.attr.colorAccent, true));
}
}
});
animator.start();
}
});
//TODO
profileImageView = (ImageView) findViewById(R.id.profileImageView);
pickImage = (Button) findViewById(R.id.pickImage);
pickImage.setOnClickListener(this);
if (ContextCompat.checkSelfPermission(EmployeeEditor.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
profileImageView.setEnabled(false);
ActivityCompat.requestPermissions(EmployeeEditor.this, new String[]{ Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
}else {
profileImageView.setEnabled(true);
}
}
private void setupSpinner() {
ArrayAdapter genderSpinnerAdapter = ArrayAdapter.createFromResource(this,R.array.array_gender_options, android.R.layout.simple_spinner_item);
genderSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
mGenderSpinner.setAdapter(genderSpinnerAdapter);
mGenderSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selection = (String) parent.getItemAtPosition(position);
if (!TextUtils.isEmpty(selection)){
if (selection.equals(getString(R.string.gender_male))){
mGender = EmployeeContract.EmployeeEntry.GENDER_MALE;
}else if (selection.equals(getString(R.string.gender_female))) {
mGender = EmployeeContract.EmployeeEntry.GENDER_FEMALE;
}else {
mGender = EmployeeContract.EmployeeEntry.GENDER_UNKNOWN;
}
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
mGender = EmployeeContract.EmployeeEntry.GENDER_UNKNOWN;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_editor, menu);
if (mCurrentEmployeeUri == null) {
MenuItem menuItem = menu.findItem(R.id.action_delete);
menuItem.setVisible(false);
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_save:
saveEmployee();
finish();
return true;
case R.id.action_delete:
showDeleteConfirmationDialog();
return true;
case android.R.id.home:
if (!mEmployeeHasChanged) {
NavUtils.navigateUpFromSameTask(EmployeeEditor.this);
return true;
}
DialogInterface.OnClickListener discardButtonClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
NavUtils.navigateUpFromSameTask(EmployeeEditor.this);
}
};
showUnSavedChangesDialog(discardButtonClickListener);
return true;
}
return super.onOptionsItemSelected(item);
}
private void saveEmployee() {
String firstnameString = mFirstNameEditText.getText().toString().trim();
String lastnameString = mLastNameEditText.getText().toString().trim();
String titleString = mTitleEditText.getText().toString().trim();
String departmentString = mDepartment.getText().toString().trim();
String cityString = mCity.getText().toString().trim();
String phoneString = mPhone.getText().toString().trim();
String emailString = mEmail.getText().toString().trim();
profileImageView.setDrawingCacheEnabled(true);
profileImageView.buildDrawingCache();
Bitmap bitmap = profileImageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
if (mCurrentEmployeeUri == null &&
TextUtils.isEmpty(firstnameString) && TextUtils.isEmpty(lastnameString) &&
TextUtils.isEmpty(titleString) && TextUtils.isEmpty(departmentString) &&
TextUtils.isEmpty(cityString) && TextUtils.isEmpty(phoneString) &&
TextUtils.isEmpty(emailString) && mGender == EmployeeContract.EmployeeEntry.GENDER_UNKNOWN) {
return;
}
ContentValues values = new ContentValues();
values.put(EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME, firstnameString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_LASTNAME, lastnameString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_TITLE, titleString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT, departmentString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_CITY, cityString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_PHONE, phoneString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_IMAGE, data);
values.put(EmployeeContract.EmployeeEntry.COLUMN_EMAIL, emailString);
values.put(EmployeeContract.EmployeeEntry.COLUMN_EMPLOYEE_GENDER, mGender);
if (mCurrentEmployeeUri == null) {
Uri newUri = getContentResolver().insert(EmployeeContract.EmployeeEntry.CONTENT_URI, values);
if (newUri == null) {
Toast.makeText(this, "Error with saving Employee", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "Employee saved", Toast.LENGTH_SHORT).show();
}
}else {
int rowAffected = getContentResolver().update(mCurrentEmployeeUri, values, null, null);
if (rowAffected == 0) {
Toast.makeText(getApplicationContext(), "Error with updating employee", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getApplicationContext(), "Employee updated", Toast.LENGTH_SHORT).show();
}
}
}
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
String[] projection = {
EmployeeContract.EmployeeEntry._ID,
EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME,
EmployeeContract.EmployeeEntry.COLUMN_LASTNAME,
EmployeeContract.EmployeeEntry.COLUMN_TITLE,
EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT,
EmployeeContract.EmployeeEntry.COLUMN_CITY,
EmployeeContract.EmployeeEntry.COLUMN_PHONE,
EmployeeContract.EmployeeEntry.COLUMN_IMAGE,
EmployeeContract.EmployeeEntry.COLUMN_EMAIL,
EmployeeContract.EmployeeEntry.COLUMN_EMPLOYEE_GENDER,
};
return new CursorLoader(this,
mCurrentEmployeeUri,
projection,
null,
null,
null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if (cursor == null || cursor.getCount() < 1) {
return;
}
if (cursor.moveToFirst()) {
int firstnameColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME);
int lastnameColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_LASTNAME);
int titleColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_TITLE);
int departmentColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT);
int cityColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_CITY);
int phoneColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_PHONE);
int imageColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_IMAGE);
int emailColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_EMAIL);
int genderColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_EMPLOYEE_GENDER);
String firstName = cursor.getString(firstnameColumnIndex);
String lastName = cursor.getString(lastnameColumnIndex);
String title = cursor.getString(titleColumnIndex);
String department = cursor.getString(departmentColumnIndex);
String city = cursor.getString(cityColumnIndex);
String phone = cursor.getString(phoneColumnIndex);
byte[] image = cursor.getBlob(imageColumnIndex);
String email = cursor.getString(emailColumnIndex);
int gender = cursor.getInt(genderColumnIndex);
mFirstNameEditText.setText(firstName);
mLastNameEditText.setText(lastName);
mTitleEditText.setText(title);
mDepartment.setText(department);
mCity.setText(city);
mPhone.setText(phone);
Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length);
profileImageView.setImageBitmap(Bitmap.createScaledBitmap(bmp, 200, 200, false));
mEmail.setText(email);
switch (gender) {
case EmployeeContract.EmployeeEntry.GENDER_MALE:
mGenderSpinner.setSelection(1);
break;
case EmployeeContract.EmployeeEntry.GENDER_FEMALE:
mGenderSpinner.setSelection(2);
break;
default:
mGenderSpinner.setSelection(0);
break;
}
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mFirstNameEditText.setText("");
mLastNameEditText.setText("");
mTitleEditText.setText("");
mDepartment.setText("");
mCity.setText("");
mPhone.setText("");
mEmail.setText("");
mGenderSpinner.setSelection(0);
}
private void showUnSavedChangesDialog(DialogInterface.OnClickListener discardButtonClickListener) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Discard your changes and quit editing?");
builder.setPositiveButton("Discard", discardButtonClickListener);
builder.setNegativeButton("Keep Editing", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if (dialog != null) {
dialog.dismiss();
}
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
private void showDeleteConfirmationDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Delete this Employee?");
builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
deleteEmployee();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if (dialog != null){
dialog.dismiss();
}
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
private void deleteEmployee() {
if (mCurrentEmployeeUri != null){
int rowsDeleted = getContentResolver().delete(mCurrentEmployeeUri,null, null);
if (rowsDeleted == 0) {
Toast.makeText(this, "Error with deleteing employee", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "Employee deleted", Toast.LENGTH_SHORT).show();
}
}
finish();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.pickImage:
new MaterialDialog.Builder(this)
.title("set your image")
.items(R.array.upload_images)
.itemsIds(R.array.itemIds)
.itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
switch (which) {
case 0:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
break;
case 1:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_PHOTO);
break;
case 2:
profileImageView.setImageResource(R.drawable.ic_account_circle_black);
break;
}
}
})
.show();
break;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 0){
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
profileImageView.setEnabled(true);
}
}
}
public void setProgressBar(){
progressBar = new ProgressDialog(this);
progressBar.setCancelable(true);
progressBar.setMessage("Please wait....");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
progressBarStatus = 0;
new Thread(new Runnable() {
@Override
public void run() {
while (progressBarStatus < 100) {
progressBarStatus += 30;
try {
Thread.sleep(1000);
}catch (InterruptedException e) {
e.printStackTrace();
}
progressBarHandler.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(progressBarStatus);
}
});
}
if (progressBarStatus >= 100){
try {
Thread.sleep(2000);
}catch (InterruptedException e){
e.printStackTrace();
}
progressBar.dismiss();
}
}
}).start();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_PHOTO) {
if (resultCode == RESULT_OK) {
try {
final Uri imageUri = data.getData();
final InputStream imageStream = getContentResolver().openInputStream(imageUri);
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
setProgressBar();
profileImageView.setImageBitmap(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}else if (requestCode == CAPTURE_PHOTO){
if (resultCode == RESULT_OK) {
onCaptureImageResult();
}
}
}
}
private void onCaptureImageResult() {
try {
// thumbnail = (Bitmap) data.getExtras().get("data");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
thumbnail = BitmapFactory.decodeFile(fileUri.getPath(), options);
setProgressBar();
// profileImageView.setMaxWidth(200);
profileImageView.setImageBitmap(thumbnail);
}catch (NullPointerException e) {
e.printStackTrace();
}
}
public Uri getOutputMediaFileUri(int type) {
return Uri.fromFile(getOutputMediaFile(type));
}
private File getOutputMediaFile(int type) {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
IMAGE_DIRECTORY_NAME);
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(IMAGE_DIRECTORY_NAME, "Ooops! Failed create"
+ IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
String timeStamp;
timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmsss",
Locale.getDefault()).format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
}else {
return null;
}
return mediaFile;
}
}
kemudian buat lagi class dengan nama EmployeeDetailsActivity untuk
menampilkan details data employee nya, dengan kode seperti berikut:
package com.giviews.employee; import android.app.LoaderManager; import android.content.CursorLoader; import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.PersistableBundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.giviews.employee.data.EmployeeContract; /** * Created by asus on 28/10/2017. */ public class EmployeeDetailsActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor>{ private Uri mCurrentEmployeeUri; private TextView mFirstname; private TextView mLastname; private TextView mDepartment; private TextView mTitle; private TextView mCity; private TextView mPhone; private TextView mEmail; private TextView mGender; private ImageView profileImageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_employee_details); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_setting); setSupportActionBar(toolbar); toolbar.setBackgroundColor(Constant.color); Intent intent = getIntent(); mCurrentEmployeeUri = intent.getData(); if (mCurrentEmployeeUri == null) { Toast.makeText(this, "No Employee Data ", Toast.LENGTH_SHORT).show(); }else { getLoaderManager().initLoader(0, null, this); } mFirstname = (TextView) findViewById(R.id.employee_firstname); mLastname = (TextView) findViewById(R.id.employee_lastname); mTitle = (TextView) findViewById(R.id.employee_title); mDepartment = (TextView) findViewById(R.id.employee_department); mCity = (TextView) findViewById(R.id.employee_city); mPhone = (TextView) findViewById(R.id.employee_phone); mEmail = (TextView) findViewById(R.id.employee_email); mGender = (TextView) findViewById(R.id.employee_gender); profileImageView = (ImageView) findViewById(R.id.profileImageView); } public Loader<Cursor> onCreateLoader(int id, Bundle args) { String[] projection = { EmployeeContract.EmployeeEntry._ID, EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME, EmployeeContract.EmployeeEntry.COLUMN_LASTNAME, EmployeeContract.EmployeeEntry.COLUMN_TITLE, EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT, EmployeeContract.EmployeeEntry.COLUMN_CITY, EmployeeContract.EmployeeEntry.COLUMN_PHONE, EmployeeContract.EmployeeEntry.COLUMN_IMAGE, EmployeeContract.EmployeeEntry.COLUMN_EMAIL, EmployeeContract.EmployeeEntry.COLUMN_EMPLOYEE_GENDER, }; return new CursorLoader(this, mCurrentEmployeeUri, projection, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { if (cursor == null || cursor.getCount() < 1) { return; } if (cursor.moveToFirst()) { int firstnameColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME); int lastnameColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_LASTNAME); int titleColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_TITLE); int departmentColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_DEPARTMENT); int cityColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_CITY); int phoneColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_PHONE); int imageCoumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_IMAGE); int emailColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_EMAIL); int genderColumnIndex = cursor.getColumnIndex(EmployeeContract.EmployeeEntry.COLUMN_EMPLOYEE_GENDER); String firstName = cursor.getString(firstnameColumnIndex); String lastName = cursor.getString(lastnameColumnIndex); String title = cursor.getString(titleColumnIndex); String department = cursor.getString(departmentColumnIndex); String city = cursor.getString(cityColumnIndex); String phone = cursor.getString(phoneColumnIndex); byte[] image = cursor.getBlob(imageCoumnIndex); String email = cursor.getString(emailColumnIndex); int gender = cursor.getInt(genderColumnIndex); setTitle(firstName); mFirstname.setText(firstName); mLastname.setText(lastName); mTitle.setText(title); mDepartment.setText(department); mCity.setText(city); mPhone.setText(phone); Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length); profileImageView.setImageBitmap(Bitmap.createScaledBitmap(bmp, 200, 200, false)); mEmail.setText(email); switch (gender) { case EmployeeContract.EmployeeEntry.GENDER_MALE: mGender.setText("Male"); break; case EmployeeContract.EmployeeEntry.GENDER_FEMALE: mGender.setText("Female"); break; default: mGender.setText("Unknown"); break; } } } @Override public void onLoaderReset(Loader<Cursor> loader) { } }
karena artikel ini sudah terlalu panjang maka part ke3 dicukupkan dulu
sampai sini akan kita lanjutkan ke part4 finishing