This tutorial is a continuation of tutorial on Populate Records in ListView
This exercise will invoke another screen to display complete information of the selected staff from the ListView.
Code is here - http://khirulnizam.com/android/FSTMDirektori.zip
STEP 1: Add a new screen (to display complete info of staff).
Right-click the project, New –> Other…
Type ViewRecord for the Activity name, and hit Finish.
STEP 2: Design the layout of ViewRecord screen.
The XML layout (open the one in layout forlder)
The XML code
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="#B58897"
tools:context=".ViewRecord" >
<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Fullname"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/txtnama"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Department"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/txtjbt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Phone"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/txttelefon"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="phone" />
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Email"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/txtemel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textEmailAddress" />
</TableRow>
<TableRow
android:id="@+id/tableRow5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/btncall"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_call_black_24dp" />
<ImageButton
android:id="@+id/btnemail"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_email_black_24dp" />
</TableRow>
</TableLayout>
</RelativeLayout>
STEP 3: Add the setOnItemClickListener on the ListView. This need to be added in the DisplayList.java
DisplayList.java
package net.kerul.fstmdirektori;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.Toast;
public class DisplayList extends Activity {
private DBHelper mHelper;
private SQLiteDatabase dataBase;
//variables to hold staff records
private ArrayList<String> stafid = new ArrayList<String>();
private ArrayList<String> nama = new ArrayList<String>();
private ArrayList<String> jbt = new ArrayList<String>();
private ListView userList;
private AlertDialog.Builder build;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_list);
userList = (ListView) findViewById(R.id.List);
mHelper = new DBHelper(this);
//click to update data
userList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent i = new Intent(getApplicationContext(),
ViewRecord.class);
i.putExtra("stafid", stafid.get(arg2));
startActivity(i);
}
});
}
@Override
protected void onResume() {
//refresh data for screen is invoked/displayed
displayData();
super.onResume();
}
/**
* displays data from SQLite
*/
private void displayData() {
dataBase = mHelper.getWritableDatabase();
//the SQL command to fetched all records from the table
Cursor mCursor = dataBase.rawQuery("SELECT * FROM "
+ DBHelper.TABLE_NAME, null);
//reset variables
stafid.clear();
nama.clear();
jbt.clear();
//fetch each record
if (mCursor.moveToFirst()) {
do {
//get data from field
stafid.add(mCursor.getString(mCursor.getColumnIndex(DBHelper.STAFID)));
nama.add(mCursor.getString(mCursor.getColumnIndex(DBHelper.NAMA)));
jbt.add(mCursor.getString(mCursor.getColumnIndex(DBHelper.JBT)));
} while (mCursor.moveToNext());
//do above till data exhausted
}
//display to screen
DisplayAdapter disadpt = new DisplayAdapter(DisplayList.this, stafid, nama, jbt);
userList.setAdapter(disadpt);
mCursor.close();
}//end displayData
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.display_list, menu);
return true;
}
}
STEP 4: The code for the second screen (View Record)
ViewRecord.java
package net.kerul.fstmdirektori;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
public class ViewRecord extends Activity {
private EditText txtnama, txtjbt, txttelefon, txtemel;
private ImageButton btncall, btnemail;
private DBHelper mHelper;
private SQLiteDatabase dataBase;
String id, telno,email,name;//to hold the data strings
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_record);
//capture sent parameter from previous screen
id=getIntent().getExtras().getString("stafid");
//initiate all textbox container to hold the data for the staff
txtnama=(EditText)findViewById(R.id.txtnama);
txtjbt=(EditText)findViewById(R.id.txtjbt);
txttelefon=(EditText)findViewById(R.id.txttelefon);
txtemel=(EditText)findViewById(R.id.txtemel);
//handling the call
//be sure to add <uses-permission android:name="android.permission.CALL_PHONE" /> in manifest
btncall=(ImageButton)findViewById(R.id.btncall);
btncall.setOnClickListener( new OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+telno ));//provide the phone number
startActivity(intent);//call
}
});//end btncall setOnCLickCListener
//handling the email button
btnemail=(ImageButton)findViewById(R.id.btnemail);
btnemail.setOnClickListener( new OnClickListener(){
public void onClick(View v){
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",email, null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "A query about FSTM");//title
emailIntent.putExtra(Intent.EXTRA_TEXT, "Salaam, "+name);//message body
startActivity(Intent.createChooser(emailIntent, "Send email..."));//invoke email client chooser
}
});//end btnemail setOnCLickCListener
}
@Override
protected void onResume() {
//refresh data for screen is invoked/displayed
displayData();
super.onResume();
}
//display single record of data from stafid
private void displayData() {
mHelper=new DBHelper(this);
dataBase = mHelper.getWritableDatabase();
//the SQL command to fetched all records from the table
String sql="SELECT * FROM "
+ DBHelper.TABLE_NAME +" WHERE stafid='"+id+"';";
Cursor mCursor = dataBase.rawQuery(sql, null);
//fetch the record
if (mCursor.moveToFirst()) {
//fetch each field and transfer to textbox
telno=mCursor.getString(mCursor.getColumnIndex(DBHelper.TELEFON));
email=mCursor.getString(mCursor.getColumnIndex(DBHelper.EMEL));
name=mCursor.getString(mCursor.getColumnIndex(DBHelper.NAMA));
//get data from field and transfer to EditText
txtnama.setText(name);
txtjbt.setText(mCursor.getString(mCursor.getColumnIndex(DBHelper.JBT)));
txttelefon.setText(telno);
txtemel.setText(email);
}
else{
//do something here if no record fetched from database
txtnama.setText(sql);
}
}//end displayData
}
Add additional uses-permission in AndroidManifest.xml to allow call from your app.
<uses-permission android:name="android.permission.CALL_PHONE" />
Now you may compile and run the app…
Code is here - http://khirulnizam.com/android/FSTMDirektori.zip
Comments
Post a Comment