• selectAll, unSelectAll两个操作的实现


    private void updateBatchSelectionStatus() {
        ContactListAdapter.ViewHolder viewHolder = null;
        TxrjContact contact = null;
        int size = mContacts.size();
        boolean select = (getSelectCount() == mContacts.size() ? true : false);
        for(int i=0;i<size;i++){
            viewHolder = (ContactListAdapter.ViewHolder)mListView.getChildAt(i).getTag();
            contact = mContacts.get(i);
            contact.setSelected(select);
            viewHolder.select
                    .setImageBitmap(select ? mListAdapter.checkBox
                            : mListAdapter.unCheckBox);
        }
    }

    红色语句出现空指针异常,原因分析:

    mContacts可能有100个TxrjContact,但是mListView不可能一下子有100个child,每次只显示可视区域中的几个view。

    将以上方法改写成

    private void updateBatchSelectionStatus() {
        int size = mContacts.size();
        boolean select = (getSelectCount() != mContacts.size() ? true : false);
        for(int i=0;i<size;i++){
            mContacts.get(i).setSelected(select);
            mListAdapter.notifyDataSetChanged();
        }
    }

    再执行就符合预期效果

    点击事件处理程序

    } else if(v == mSelectAll) {
        updateBatchSelectionStatus();
        updateSelectButtonText();
    }

  • 相关阅读:
    .net 流读取
    c#小Tip:数字格式化显示
    VS.NET优化编译速度
    Application.Run()和Form.Show()的区别
    如何利用系统函数操作文件夹及文件
    设计优秀的用户界面
    我妈过来了
    帮你免于失业的十大软件技术(转抄)
    正试图在 OS 加载程序锁内执行托管代码
    NASA World Wind
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3188896.html
Copyright © 2020-2023  润新知