我是Android开发新手,我在可能的应用程序中有Listview,Listview中填充了来自Sqlite数据库的数据。我想使用这个列表视图上的复选框&删除选定的项目。 我想清除Sqlite Db中选定的数据行。 任何有用的帮助将不胜感激。从列表视图中删除数据
首先我必须在我的应用程序获取短信如下:` 如果(捆绑!= 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();`
然后存储SQLite中DB如下:
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();
}
在获得之后在我的listview Activity中成功。
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;
}
我可以成功地删除整个线程,但现在我wantt使用复选框 删除列表视图,从几个短信任何有用的教程吗?
使用自定义适配器的列表视图 – jyomin
所以我们一些代码你做了什么? – 2014-01-10 04:36:06
请按照您所做的一切显示一些代码 – PsyGik