zoukankan      html  css  js  c++  java
  • 加载ConversationListActivity以及延迟的使用

    1. 加载会话列表分两步加载。

    且第1步和第2步之间有些延迟,便于第1步的结果及时在ListView中显示出来。

    mHandler.postDelayed(new LoadThreadsExtra(), 200);

    第1步。从threads表中查找出数据,封装成TxrjThread,构建ConversationAdapter,在ListView中显示出来。

    第2步。从sms, canonical_address, data等表中查找出hasDraftMsg, hasFailMsg, unreadCount, number, name等信息,调用notifyDataChanged()更新数据。

    class LoadThreadsExtra implements Runnable {
       
        List<Long> draftIds = null;
        List<Long> failIds = null;
        Map<Long, Integer> unreadMap = null;
        Map<Integer, String> canonicalAddrMap = null;
        Map<String, String> nameAddrMap = null;

        @Override
        public void run() {
            draftIds = SmsDataManager.getThreadsWithDraftMsg(mContext);
            failIds = SmsDataManager.getThreadsWithFailedMsg(mContext);
            unreadMap = SmsDataManager.getThreadUnreadCountMap(mContext);
            canonicalAddrMap = SmsDataManager.getCanonicalAddressMap(mContext);
            nameAddrMap = SmsDataManager.getNameAddressMap(mContext);
           
            int threadCount = mThreads.size();
            for(int i=0;i<threadCount;i++){
                TxrjThreads thread = mThreads.get(i);
                long threadId = thread.getThreadId();
                thread.setHasDraftMsg(draftIds.contains(threadId));
                thread.setHasFailMsg(failIds.contains(threadId));
                thread.setUnReadCount(unreadMap.containsKey(threadId) ? unreadMap.get(threadId) : 0);
                setNameNumber(thread, thread.getRecipientId());
            }
           
            mHandler.sendEmptyMessage(TxrjConstant.WHAT_NOTIFY_DATA_CHANGED);
        }
       
        private void setNameNumber(TxrjThreads thread, String recipientIds) {
            // 提取Number.
            String[] ids = recipientIds.trim().split(" ");
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < ids.length; i++) {
                sb.append(canonicalAddrMap.get(Integer.valueOf(ids[i])));
                if (i != ids.length - 1) {
                    sb.append(",");
                }
            }
            thread.setNumber(sb.toString());
            sb = new StringBuffer();
            // 提取Name.
            String[] numbers = thread.getNumber().split(",");
            for (int i = 0; i < numbers.length; i++) {
                String name = nameAddrMap.get(numbers[i]);
                sb.append(name == null ? numbers[i] : name);
                if (i != numbers.length - 1) {
                    sb.append(",");
                }
            }
            thread.setName(sb.toString());
        }
    }
    2. 进入ConversationListActivity界面中,在加载数据之前也要延迟一点时间,便于Activity将UI及时显示出来,避免了UI显示慢的现象。

    mHandler.postDelayed(new Runnable() {
        public void run() {
            new LoadThreadsTask().execute();
        }
    }, 200);

  • 相关阅读:
    hdu 1269 迷宫城堡 (并查集)
    hdu 1272 小希的迷宫 (深搜)
    hdu 1026 Ignatius and the Princess I (深搜)
    hdu 1099 Lottery
    hdu 1068 Girls and Boys (二分匹配)
    几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
    hdu 1072 Nightmare (广搜)
    hdu 1398 Square Coins (母函数)
    hdu 1253 胜利大逃亡 (深搜)
    hdu 1115 Lifting the Stone (求重心)
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3195672.html
Copyright © 2011-2022 走看看