I am new to Android development, I have a Listview in may app, Listview is populated with data from Sqlite database. I want to use check boxes on this listview & delete selected item. I want to clear selected data rows form Sqlite Db indeed. Any useful help will be appreciated.
First i have retrieved SMS in my app as follows:` if (bundle != null) {
//—retrieve the SMS message received—
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
timestamp = smsMessage[n].getTimestampMillis();
number = smsMessage[n].getOriginatingAddress();
body += smsMessage[n].getDisplayMessageBody();
abortBroadcast();
blockMessage(context);
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
}
private void blockMessage(Context context) {
// instantiate DbMNager object to insert sms in database
//formating receiving time:
//SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss");
SimpleDateFormat formatter = new SimpleDateFormat("EEEE, MMMM d HH:mm:ss a");
String formatedTime = formatter.format(timestamp);
DBmanager= new DbManager(context);
DBmanager.open();
DBmanager.Insert_sms_data(formatedTime ,number,body);
DBmanager.close();`
Then stored in SQlite DB as follows :
public void Insert_sms_data(String formatedTime, String number, String body){
try{
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(SMS_Time, formatedTime);
cv.put(PHONE_NUMBER, number);
cv.put(MESSAGE_BODY, body);
DB.insert(TABLE_SMS, null, cv);
DB.close();
}
catch(Exception ex)
{
Log.e("ERROR in insertion", ex.toString());
}
}
public Cursor Return_All(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cur = db.rawQuery("SELECT * FROM "+"SMS_TABLE", null);
return cur;
}
// Clear all messaged
public void ClearAll(){
SQLiteDatabase db = this .getWritableDatabase();
db.delete(TABLE_SMS, null, null);
db.close();
}
After that retrieved in my listview Activity successfully.
public class MainActivity extends Activity {
ListView listViewSMS;
Context context;
DbManager manager;
Button btn_clearall;
Cursor cursor;
SimpleCursorAdapter adapter;
//array from is the column name in your cursor where you're getting the data
String[] from = new String[]{"Phone_number","Message_body","Time"};
//array toIDs contains the id of textViews
int[] toIDs = new int[]{R.id.textViewSMSSender,R.id.textViewMessageBody,R.id.textViewMSMStime};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_activity_main);
context=this;
//get the ListView Reference
try{
listViewSMS=(ListView)findViewById(R.id.listViewSMS);
listViewSMS.setChoiceMode(listViewSMS.CHOICE_MODE_MULTIPLE);
manager = new DbManager(context);
cursor = manager.Return_All();
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listview_each_item, cursor, from, toIDs);
listViewSMS.setAdapter(adapter);
adapter.notifyDataSetChanged();
//refreshCursor();
listViewSMS.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position,
long arg3) {
int itemId = Integer.valueOf(String.valueOf(position));
cursor.moveToPosition(itemId);
int messageId = cursor.getInt(0);
deleteMessage(messageId);
Toast.makeText(getApplicationContext(), "current position"+itemId, Toast.LENGTH_LONG).show();
TextView tv_SMSSenderNumber=(TextView)v.findViewById(R.id.textViewSMSSender);
TextView tv_SMSBody=(TextView)v.findViewById(R.id.textViewMessageBody);
TextView tv_SMSTime=(TextView)v.findViewById(R.id.textViewMSMStime);
String smsSender=tv_SMSSenderNumber.getText().toString();
String smsBody= tv_SMSBody.getText().toString();
String smsTime= tv_SMSTime.getText().toString();
}
});
}
catch(Exception ex){
Log.e("ERROR!!", ex.toString());
}
btn_clearall = (Button)findViewById(R.id.btn_Delall);
btn_clearall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clearMessages();
//refreshCursor();
// adapter.notifyDataSetChanged();
}
});
CheckBox cb_sms_lv = (CheckBox)findViewById(R.id.cb_smslist);
}
protected void clearMessages() {
new AlertDialog.Builder(MainActivity.this).setIcon(
android.R.drawable.ic_dialog_alert).setTitle(R.string.delete)
.setMessage(getString(R.string.clear_message_confirm))
.setPositiveButton(R.string.delete,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di, int i) {
manager = new DbManager(
context);
manager.open();
manager.ClearAll();
manager.close();
refreshCursor();
}
}).setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di, int i) {
}
}).show();
}
private void deleteMessage(final int messageId){
new AlertDialog.Builder(MainActivity.this).setIcon(
android.R.drawable.ic_dialog_alert).setTitle(R.string.delete)
.setMessage(getString(R.string.delete_message_confirm))
.setPositiveButton(R.string.delete,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di, int i) {
manager = new DbManager(
context);
manager.open();
manager.deleteMessage(messageId);
manager.close();
refreshCursor();
}
}).setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di, int i) {
}
}).show();
}
public void refreshCursor() {
manager = new DbManager(context);
manager.open();
cursor = manager.Return_All();
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listview_each_item, cursor, from, toIDs);
listViewSMS.setAdapter(adapter);
manager.close();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
I can delete the whole thread successfully but now i wantt to delete few sms from listview using checkbox Any helpful tutorial please?