無論是Android開發或者是其他移動平臺的開發,ListView肯定是一個大咖,那么對ListView的操作肯定是不會少的,上一篇博客介紹了如何實現全選和反選的功能,本篇博客介紹刪除功能,刪除列表中的項無謂就是及時刷新列表,這又跟UI線程扯上關系了,還是那句話,數據的更新通知一定要在UI線程上做,不然會出現各種錯誤,比如出現adapter數據源改變,但沒有及時收到通知的情況。在執行遍歷刪除的時候,最好不要每刪一個就直接通知,下面是我的實現方法,將需要刪除的contact保存到一個List然后通過handler發生消息,然后再由handler來處理。
這里我順帶提一下菜單的實現
1、定義menu下的xml文件
<group android:id="@+id/metting_menu" >
<item
android:id="@+id/select_all_item"
android:icon="@drawable/select_all_not"
android:title="全選">
</item>
<item
android:id="@+id/delete_item"
android:icon="@drawable/delete"
android:title="刪除">
</item>
<item
android:id="@+id/sync_item"
android:icon="@drawable/sync_manage"
android:title="同步">
</item>
</group>
</menu>
// 當用戶打開菜單的時候觸發
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (menu != null) {
refreshSelectAllItemIcon();
}
return super.onMenuOpened(featureId, menu);
}
/**
* menu的點擊事件
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.select_all_item:
if (isAllChecked) { // 反選
item.setIcon(R.drawable.select_all_not);
invertSelection();
} else { // 全選
if (contactList.size() == 0) {
Toast.makeText(this, "目前沒有可選的聯系人", Toast.LENGTH_SHORT)
.show();
break;
}
item.setIcon(R.drawable.select_all);
selectAllContacts();
}
break;
case R.id.delete_item: // 刪除
if (count == 0) {
Toast.makeText(this, "您還沒有選擇任何聯系人", Toast.LENGTH_SHORT).show();
break;
}
showDeleteDialog(this, "您確定要刪除嗎");
isAllChecked = false;
selectAllItem.setIcon(R.drawable.select_all_not);
break;
case R.id.sync_item:
Intent fresh_intent = new Intent(this, CloudSyncActivity.class);
if (flag) {// 如果是會議
fresh_intent.putExtra("number", meetingNumber);
}
startActivityForResult(fresh_intent, CLOUD_SYNC);
break;
default:
break;
}
return false;
}
// 刷新菜單項全選
private void refreshSelectAllItemIcon() {
for (String contactId : map_NumberSelected.keySet()) {
if (!map_NumberSelected.get(contactId)) {
isAllChecked = false;
selectAllItem.setIcon(R.drawable.select_all_not);
break;
}
isAllChecked = true;
selectAllItem.setIcon(R.drawable.select_all);
}
}
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
handler處理代碼:
這里把傳遞過來list在contactList遍歷刪除,然后在msg.what為DELETE_COMPLETE的分支進行通知列表刷新。
新聞熱點
疑難解答
圖片精選