得到mMessages之后,先判断有没有草稿信息,有的话,从列表中删除草稿信息,将草稿信息保存在另外一个变量中。
@Override
protected void onPostExecute(List<TxrjMessage> result) {
super.onPostExecute(result);
mMessages = result;
for(TxrjMessage msg : mMessages) {
if(msg.getType() == Sms.MESSAGE_TYPE_DRAFT) {
mEditMsg.setText(msg.getBody()); // 将草稿信息内容显示在文本框中。
draftMsg = msg; // 将草稿信息保存在另外一个变量中。
mMessages.remove(msg); // 将草稿信息从信息列表中删除。
break;
}
}
mListAdapter = new MessageListAdapter(mContext, mMessages);
mListView.setAdapter(mListAdapter);
if(TxrjConstant.ACTION_SEND_MESSAGE.equals(getIntent().getAction())) {
performSendMessage(getIntent().getStringExtra(TxrjConstant.EXTRA_MESSAGE_BODY));
}
mProgressDialog.dismiss();
}
在信息列表界面中,点击返回键时,保存(修改,删除)草稿信息。
private void removeDraftMessage() {
if(draftMsg == null) {
return;
}
getContentResolver().delete(Sms.CONTENT_URI,
"_id=" + draftMsg.getMessageId(), null); // 删除指定sms._id草稿信息。
draftMsg = null;
}
private void updateDraftMessage() {
String body = mEditMsg.getText().toString();
if(body.equals(draftMsg.getBody())) {
return;
}
ContentValues values = new ContentValues();
values.put(Sms.DATE, System.currentTimeMillis());
values.put(Sms.BODY, body);
getContentResolver().update(Sms.CONTENT_URI, values,
"_id=" + draftMsg.getMessageId(), null); // 更新指定sms._id的草稿信息。
}
private void saveDraftMessage() {
String body = mEditMsg.getText().toString();
ContentValues values = new ContentValues();
values.put(Sms.TYPE, Sms.MESSAGE_TYPE_DRAFT);
values.put(Sms.THREAD_ID, mThreadId);
values.put(Sms.DATE, System.currentTimeMillis());
values.put(Sms.BODY, body);
getContentResolver().insert(Sms.CONTENT_URI, values); // 插入一个新的草稿信息。
}
当编辑框文本内容不为空时,更新当前草稿信息,或者插入一个新的草稿信息。
编辑框文本内容为空时,删除当前草稿信息(如果当前会话存在草稿信息)。
@Override
public void onBackPressed() {
if(!TextUtils.isEmpty(mEditMsg.getText().toString())){
if(draftMsg != null) {
updateDraftMessage();
} else {
saveDraftMessage();
}
} else {
removeDraftMessage();
}
super.onBackPressed();
}
需要注意的是:会话列表中的message_count不包括草稿信息。
如果该会话只有草稿信息,没有别的信息,那么message_count值为零。