Skip to main content

Update Record by long-press ListView - Android database SQLite (p6)

Download the complete code here  ic_file_download_black_24dp_2x http://khirulnizam.com/android/FSTMDirektori.zip

screen offline db output display all records -> long-press on selected item and the UpdateRecord screen will appear screen offline db update record

Tutorial description: The product of this tutorial is to invoke another screen to update (edit) the selected record. The first screen is the list of all records. User is able to update the selected record by long-pressing the item.

Before you proceed with the tutorial, you might want to read the previous tutorial - View Complete Record from ListView.

 

STEP 1: Add a new screen named UpdateRecord

Right-click on the project name –>New –> Other…

add new screen to display complete record

new screen select Android ctivity

Set the Activity Name as UpdateRecord and hit Finish…

new activity update-record

STEP 2: UpdateRecord screen layout

Design the screen layout as below.

update record layout design

activity_update_record.xml

<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="#33ADAD"
tools:context=".UpdateRecord" >

<!-- FILE activity_update_record.xml -->
<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/tableRow6"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_mode_edit_black_24dp" />

</TableRow>

<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" >

<Button
android:id="@+id/btnsave"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Save Update" />

</TableRow>

</TableLayout>

</RelativeLayout>


 


STEP 3: This is the code in UpdateRecord.java to display selected record, and perform the update record save.


update-record displayData methodupdate-record saveData method


UpdateRecord.java


package net.kerul.fstmdirektori;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
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;

public class UpdateRecord extends Activity {
private EditText txtnama, txtjbt, txttelefon, txtemel;
private Button btnsave;
private DBHelper mHelper;
private SQLiteDatabase dataBase;
private String id,name,telno,email,dept;//to hold the data strings

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update_record);

mHelper=new DBHelper(this);
dataBase = mHelper.getWritableDatabase();

//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);

//display field record inside the textboxes
displayData();

btnsave=(Button)findViewById(R.id.btnsave);
btnsave.setOnClickListener( new OnClickListener(){
public void onClick(View v){
//capture amendment
name=txtnama.getText().toString();
telno=txttelefon.getText().toString();
email=txtemel.getText().toString();
dept=txtjbt.getText().toString();

saveData();
}
});//end btnsave setOnCLickCListener
}

//display single record of data from stafid
private void displayData() {

//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


//save updated data
private void saveData(){
//dataBase=mHelper.getWritableDatabase();
ContentValues values=new ContentValues();

values.put(DBHelper.NAMA,name);
values.put(DBHelper.EMEL,email );
values.put(DBHelper.TELEFON,telno );
values.put(DBHelper.JBT,dept);

System.out.println("");

//update database with new data
dataBase.update(DBHelper.TABLE_NAME, values, DBHelper.STAFID+"="+id, null);

//close database
dataBase.close();
finish();


}

}


STEP 4: Update the code in DisplayList.java to add the setOnItemLongClickListener() method in the ListView.


long-click item to update record


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 String id;//to hold selected stafid
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);
}
});//end setOnItemClickListener

//long-press to update data
userList.setOnItemLongClickListener(new OnItemLongClickListener() {

public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
final int arg2, long arg3) {
Intent i = new Intent(getApplicationContext(),
UpdateRecord.class);
i.putExtra("stafid", stafid.get(arg2));
startActivity(i);
return true;
}
});//end setOnItemLongClickListener


}

@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;
}

}


Now, you may compile and run to test the app.


Download the complete code here  ic_file_download_black_24dp_2x http://khirulnizam.com/android/FSTMDirektori.zip

Comments

Popular posts from this blog

Assignment for Web/Internet Programming II

Scenario You are given a task to develop a simple web database application for a movies rental shop. The system will store the information of all the movies available in the shop. Below are the information needed for the database. Database server information : server address= localhost , username= root , no password Database name: MOVIEDB This is the database source Table name : Movies Fields in table Movies : MovieID , MovieTitle , Category , Director , YearProduced , RentalPrice . Tasks 1. Create the database and table as stated above (using MySQL through phpMyAdmin). Populate the database by entering at least 5 movie titles. 2. Develop the web pages (combination of HTML and PHP scripts) to search and display the movies information by MovieTitle and YearProduced . 3. Develop a HTML form for the user to insert a new record of a new movie. Prepare the input for Category and YearProduced using the select option list. The categories are fiction , horror , comedy , ...

Several English proverbs and the Malay pair

Or you could download here for the Malay proverbs app – https://play.google.com/store/apps/details?id=net.kerul.peribahasa English proverbs and the Malay pair Corpus Reference: Amir Muslim, 2009. Peribahasa dan ungkapan Inggeris-Melayu. DBP, Kuala Lumpur http://books.google.com.my/books/about/Peribahasa_dan_ungkapan_Inggeris_Melayu.html?id=bgwwQwAACAAJ CTRL+F to search Proverbs in English Definition in English Similar Malay Proverbs Definition in Malay 1 Where there is a country, there are people. A country must have people. Ada air adalah ikan. Ada negeri adalah rakyatnya. 2 Dry bread at home is better than roast meat home's the best hujan emas di negeri orang,hujan batu di negeri sendiri Betapa baik pun tempat orang, baik lagi tempat sendiri. 3 There's no accounting for tastes We can't assume that every people have a same feel Kepala sama hitam hati lain-lain. Dalam kehidupan ini, setiap insan berbeza cara, kesukaan, perangai, tabia...

Submit your blog address here

Create your own blog and send the address by submitting the comment of this article. Make sure to provide your full name, matrix and URL address of your blog. Refer to the picture below. Manual on developing a blog using blogger.com and AdSense, download here … Download Windows Live Writer (a superb offline blog post editor)

Filter setting in new AdMob panel

The new AdMob interface was launched last week (I was invited on early May 2014). The transition was smooth however from my experience I lost all my account balance in the old interface. One thing I do not like with the new apps is, it do not want to support PayPal payment. (Update – later I found out that the new AdMob facility provide direct wired-transfer to you favorite local banks. Just provide your account number and bank SWIFT-BIC and wait till your balance achieve the threshold value. This is normally a three day compared to two weeks PayPal transfer.You can change this in the Account > Payments > Payment Settings )  I have not figured out how to channel my commission payment to my local bank account. The thing I’d like to elaborate is the ads filtering panel. After you have logged-in to the new system (at https://apps.admob.com/ ), find the Account panel on the top-right of the page. Inside the Account panel, click on the Legacy AdMob data menu . Then choose the ...

Installing Google AdMob into Android Apps

Previously I wrote on why ads are needed to help maintaining an app. Read the article here http://blog.kerul.net/2011/05/generating-revenue-from-free-mobile.html . ---This is quite an old article. You may find the latest supporting AdMob 6.x in here http://blog.kerul.net/2012/08/example-how-to-install-google-admob-6x.html --- This is quite a long tutorial, there are 3 major steps involved. The experiment is done using Windows 7, Eclipse Helios and AdMob SDK 4.1.0 (which currently is the latest-during time of writing). STEP 1: Get the ads from AdMob.com To display the AdMob ads in your Android mobile apps, you need to register first at the admob.com . After completing the registration, login and Add Site/App. Refer to Figure 1. Figure 1 Choose the desired platform and fill in the details (as in Figure 2). Just put http:// in the Android Package URL if your app is not published in the market yet. And click Continue. Figure 2 Download the AdMob Android SDK, and save the zip fil...