亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android通訊錄開發之刪除功能的實現方法

2020-04-11 11:56:17
字體:
來源:轉載
供稿:網友

無論是Android開發或者是其他移動平臺的開發,ListView肯定是一個大咖,那么對ListView的操作肯定是不會少的,上一篇博客介紹了如何實現全選和反選的功能,本篇博客介紹刪除功能,刪除列表中的項無謂就是及時刷新列表,這又跟UI線程扯上關系了,還是那句話,數據的更新通知一定要在UI線程上做,不然會出現各種錯誤,比如出現adapter數據源改變,但沒有及時收到通知的情況。在執行遍歷刪除的時候,最好不要每刪一個就直接通知,下面是我的實現方法,將需要刪除的contact保存到一個List然后通過handler發生消息,然后再由handler來處理。

這里我順帶提一下菜單的實現
1、定義menu下的xml文件

復制代碼 代碼如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

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


icon為菜單圖標
title為菜單文本
2. 代碼實現
復制代碼 代碼如下:

/**
  * 創建菜單
  */
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.meetting_contact_menu, menu);
  selectAllItem = menu.findItem(R.id.select_all_item);
  return true;
 }

 // 當用戶打開菜單的時候觸發
 @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);
  }
 }


提示刪除的對話框
復制代碼 代碼如下:

/** 顯示確認刪除對話框 **/
 public void showDeleteDialog(Context context, String msg) {
  final Dialog dialog = new Dialog(context, R.style.MyDialog);
  View view = LayoutInflater.from(context).inflate(R.layout.back_dialog,
    null);
  TextView msg_tv = (TextView) view.findViewById(R.id.msg);
  msg_tv.setText(msg);
  Button sure = (Button) view.findViewById(R.id.sure);
  Button cancle = (Button) view.findViewById(R.id.cancle);
  dialog.setContentView(view);
  sure.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    deleteContacts();
    dialog.dismiss();
   }
  });
  cancle.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    dialog.dismiss();
   }
  });
  dialog.show();
 }


下面是刪除操作:
這里只關注實現刪除的脈路,其中有些代碼是業務邏輯需要可以稍微看一下就可以了
復制代碼 代碼如下:

 // 刪除選中的聯系人
 public void deleteContacts() {
  DialogHelp.getInstance().showHttpDialog(this, R.string.wait_for_while,
    getString(R.string.deleting_contact));
  new Thread() {
   @Override
   public void run() {
    ArrayList<Contact> deleteContacts = new ArrayList<Contact>();
    for (Contact contact : contactList) {
     boolean isselected = map_NumberSelected
       .get(contact.getId());
     if (isselected) {
      for (RawContact rawContact : rawList) {
       if (contact.getUserId() == rawContact.getUserId()) { // 是同一個id
        if (contact.getNumber() == rawContact
          .getPhone1()) {
         rawContact.setPhone1(null);
        } else if (contact.getNumber() == rawContact
          .getPhone2()) {
         rawContact.setPhone2(null);
        } else if (contact.getNumber() == rawContact
          .getTelephone()) {
         rawContact.setTelephone(null);
        }
        if ((rawContact.getPhone1() == null || ""
          .equals(rawContact.getPhone1()))
          && (rawContact.getPhone2() == null || ""
            .equals(rawContact.getPhone2()))
          && (rawContact.getTelephone() == null || ""
            .equals(rawContact
              .getTelephone()))) {
         MyDataBase.deleteContact(
           MeetingContactActivity.this,
           rawContact);
        } else {
         MyDataBase.updateContactById(
           MeetingContactActivity.this,
           rawContact);
        }
        break;
       }
      }
      // 將需要刪除的聯系人保存下來
      deleteContacts.add(contact);
     }
    }
    Message msg = new Message();
    msg.obj = deleteContacts;
    msg.what = DELETE_COMPLETE;
    handler.sendMessage(msg);
   };
  }.start();

 }


deleteContacts是用來保存需要刪除的聯系人,把它賦給msg.obj,再通過handler將消息放入消息隊列,最終在handler的handleMessage方法進行刪除操作。


handler處理代碼:
這里把傳遞過來list在contactList遍歷刪除,然后在msg.what為DELETE_COMPLETE的分支進行通知列表刷新。

復制代碼 代碼如下:

private Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   if (msg.obj != null) {
    ArrayList<Contact> deleteContacts = (ArrayList<Contact>) msg.obj;
    for (Contact contact : deleteContacts) {
     map_NumberSelected.remove(contact.getId());
     contactList.remove(contact);
    }
   }
   switch (msg.what) {
   case LOAD_CONTACT_FINISHED:
    // 判斷是否為空
    if (contactList == null || contactList.size() == 0) {
     syncLayout.setVisibility(View.VISIBLE);
     bottomLayout.setVisibility(View.GONE);
     listView.setVisibility(View.GONE);
    } else {
     syncLayout.setVisibility(View.GONE);
     bottomLayout.setVisibility(View.VISIBLE);
     listView.setVisibility(View.VISIBLE);
    }
    adapter.setContactList(contactList);
    refreshList();
    DialogHelp.getInstance().dismissDialog();
    break;
   case CLOUD_SYNC: // 同步
    initContacts();
    refreshList();
    break;
   case SEARCH_FINISH:
    refreshList();
    break;
   case DELETE_COMPLETE: // 刪除完畢
    DialogHelp.getInstance().dismissDialog();
    // 重新初始化
    refreshList();
    break;
   }
  }
 };

以上就是刪除功能的全部實現了,關于通訊錄模塊開發博客可能會暫停更新,比如想字母索引,聯系人分組等功能我還沒去實現,以后有機會會繼續分享。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频在线观看 亚洲欧| 国产精品久久久av久久久| 亚洲xxxx视频| 在线播放国产一区中文字幕剧情欧美| 久久久久北条麻妃免费看| 欧美日韩国产一区在线| 亚洲国产高清自拍| 欧美在线一区二区视频| 欧美性极品少妇精品网站| 在线视频免费一区二区| 久久久久久久久爱| 少妇高潮久久77777| 亚洲激情电影中文字幕| 欧美中文字幕在线| 5566日本婷婷色中文字幕97| 国产精品视频区| 在线看国产精品| 啪一啪鲁一鲁2019在线视频| 国产在线999| 98午夜经典影视| 国产一区私人高清影院| 亚洲午夜未满十八勿入免费观看全集| 国产欧美日韩丝袜精品一区| 欧美刺激性大交免费视频| 日韩免费中文字幕| 亚洲天堂男人天堂女人天堂| 成人av在线亚洲| 日韩精品中文字幕久久臀| 91在线网站视频| 日韩精品小视频| 久久天天躁日日躁| 91在线网站视频| 欧美激情精品久久久久久变态| 亚洲天堂开心观看| 成人精品aaaa网站| 亚洲美女久久久| 日韩一区二区久久久| 日韩中文字幕精品| 8x拔播拔播x8国产精品| 欧美精品在线免费| www.久久草.com| 九九精品视频在线观看| 国产女精品视频网站免费| 午夜精品久久久久久99热| 精品调教chinesegay| 国产精品久久久久久亚洲影视| 国产精品美女视频网站| 精品国产91乱高清在线观看| 久久精品亚洲精品| 久久99热精品| 中文字幕日韩av| 欧美性在线视频| 91久久综合亚洲鲁鲁五月天| 亚洲欧美日韩视频一区| 欧美在线免费视频| 欧美性xxxxx极品| 成人综合网网址| 国产精品欧美一区二区三区奶水| 亚洲人成网在线播放| 欧美电影免费观看高清完整| 欧美亚洲一区在线| 国产精品一香蕉国产线看观看| 91最新在线免费观看| 日本精品在线视频| 日韩精品在线观看一区| 日韩毛片在线观看| 欧美日韩成人在线观看| 亚洲福利视频久久| 精品偷拍各种wc美女嘘嘘| 亚洲欧美国内爽妇网| www欧美xxxx| 国产中文日韩欧美| 精品久久久久久久大神国产| 亚洲视屏在线播放| 欧美极品在线视频| 欧美另类xxx| 国产日韩欧美电影在线观看| 久久手机免费视频| 欧美成年人视频网站欧美| 日韩成人中文电影| 在线日韩日本国产亚洲| 九九热精品在线| 欧美激情亚洲视频| 亚州精品天堂中文字幕| 欧美超级乱淫片喷水| 亚洲国产美女精品久久久久∴| 国产成人激情小视频| 欧美高清一级大片| 日本精品久久中文字幕佐佐木| www.久久草.com| 国产精品视频资源| 成人欧美一区二区三区在线湿哒哒| 九九久久综合网站| 国产成人久久精品| 欧美精品在线视频观看| 日韩av在线资源| 欧美视频国产精品| 欧美精品做受xxx性少妇| 视频直播国产精品| 欧美激情喷水视频| 亚洲自拍偷拍色片视频| 韩国福利视频一区| 国产精品一区二区久久精品| 欧美一区二区三区免费视| 91精品国产色综合久久不卡98口| 久久久久久久久久久免费精品| 国产精品青青在线观看爽香蕉| 成人免费在线视频网址| 国产精品久久久久久久久借妻| 亚洲夜晚福利在线观看| 欧美精品在线免费| 成人国产精品av| 欧美激情视频给我| 亚洲欧美国产精品| 色妞欧美日韩在线| 亚洲综合日韩中文字幕v在线| 欧美午夜性色大片在线观看| 亚洲电影av在线| 97久久精品人人澡人人爽缅北| 亚洲精品国产精品久久清纯直播| 欧美日韩亚洲精品一区二区三区| 亚洲综合一区二区不卡| 日本伊人精品一区二区三区介绍| 色偷偷亚洲男人天堂| 亚洲成人动漫在线播放| 精品中文字幕在线| 精品亚洲男同gayvideo网站| 日韩美女免费视频| 国产日韩欧美视频在线| 亚洲一区亚洲二区| 亚洲天堂开心观看| 亚洲精品视频免费| 欧美激情免费视频| 国产精品久久久久久久app| 中文字幕欧美精品日韩中文字幕| 91丝袜美腿美女视频网站| 91免费电影网站| 久久99精品久久久久久噜噜| 日韩成人性视频| 91免费国产网站| 中文字幕日韩综合av| 国产精品久久久久久久9999| 久久久国产精品亚洲一区| 亚洲jizzjizz日本少妇| 一区二区三区无码高清视频| 久久精品中文字幕一区| 91精品综合视频| 91视频九色网站| 日本高清+成人网在线观看| 一区二区三区在线播放欧美| 久久久久久久激情视频| 国产精品视频自在线| 日韩精品高清在线观看| 国产精品久久久久久久久久免费| 日韩在线激情视频| 青草青草久热精品视频在线网站| 成人美女免费网站视频| 国产精品亚洲一区二区三区| 97av在线视频免费播放| 欧美亚洲成人免费| 精品久久久久久久久久久久久| 亚洲影院色在线观看免费| 色琪琪综合男人的天堂aⅴ视频| 亚洲欧美日韩精品久久|