只有三条数据,但是调用GetCount()方法多达650+以上的次数,不知道原因。是否与Layout XML文件相关
private class ListViewAdapter extends BaseAdapter
    {
        /* inflater */
        private LayoutInflater mInflater;        private ArrayList<AbsSiteInfo> sites;        private ArrayList<LDAPSiteInfo> ldapSites;        private ArrayList<AbsSiteInfo> selectedSites;        private ArrayList<LDAPSiteInfo> selectedLDAPSites;        private int count = 0;        public ListViewAdapter()
        {
            HLog.i("AddrLocalView", "ListViewAdapter: ListViewAdapter");
            mInflater = LayoutInflater.from(mContext);
            sites = new ArrayList<AbsSiteInfo>();
            ldapSites = new ArrayList<LDAPSiteInfo>();
            selectedSites = new ArrayList<AbsSiteInfo>();
            selectedLDAPSites = new ArrayList<LDAPSiteInfo>();
        }        @Override
        public int getCount()
        {
            return count;
        }        public String getItemName(int postion)
        {
            HLog.i("AddrLocalView", "ListViewAdapter: getItemName");
            if (postion >= sites.size())
            {
                return ldapSites.get(postion - sites.size()).getAbsSite().name;
            }
            else
            {
                return sites.get(postion).name;
            }        }        public int getSelectedCount()
        {
            HLog.i("AddrLocalView", "ListViewAdapter: getSelectedCount");
            return selectedLDAPSites.size() + selectedSites.size();
        }
        public ArrayList<AbsSiteInfo> getSites()
        {
            return sites;
        }        @Override
        public long getItemId(int position)
        {
            HLog.i("AddrLocalView", "ListViewAdapter: getItemId");
            return position;
        }       
       
        /**
         * 得到每行item ,一个view代表一行item
         */
        public View getView(int position, View convertView, ViewGroup parent)
        {
            HLog.i("AddrLocalView", "ListViewAdapter: getView");
            final Viewholder viewholder;
            if (convertView == null)
            {
                convertView = mInflater.inflate(R.layout.address_list_style, null);
                viewholder = new Viewholder();                // 取出控件对象
                viewholder.lineLayout = (LinearLayout) convertView.findViewById(R.id.lineText);
                viewholder.text = (TextView) convertView.findViewById(R.id.txtSname);
                viewholder.no = (TextView) convertView.findViewById(R.id.no);
                viewholder.onlineImage = (ImageView) convertView.findViewById(R.id.online_status_image);
                viewholder.mtableLayout = (TableLayout) convertView.findViewById(R.id.childText);
                viewholder.addrCheckbox = (CheckBox) convertView.findViewById(R.id.address_check);
                viewholder.btnSave = (ImageButton) convertView.findViewById(R.id.ldap_item_save);
                viewholder.btnExpand = (ImageView) convertView.findViewById(R.id.expand);
                viewholder.ldap_image = (ImageView) convertView.findViewById(R.id.ldap_image);                viewholder.addrCheckbox.setOnClickListener(new OnClickListenerHandle()
                {
                    @Override
                    public void onNormalClick(View v)
                    {
                        CheckBox chkbtn = (CheckBox) v;
                        handlerCheckboxClick(chkbtn);
                    }                });                                convertView.setTag(viewholder);
            }
            else
            {
                viewholder = (Viewholder) convertView.getTag();
            }

解决方案 »

  1.   

    除上Layout 的XML源码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:orientation="horizontal" android:id="@+id/sitetitleline"
    android:gravity="center" android:layout_width="fill_parent"
    android:layout_height="40dip">
    <CheckBox android:id="@+id/address_check" android:button="@drawable/call_select_normal"
    style="@style/check_box_style" />
    <LinearLayout android:id="@+id/lineText"
    android:orientation="horizontal" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:gravity="center_vertical">
    <ImageView android:id="@+id/online_status_image"
    android:layout_width="20dip" android:layout_height="wrap_content" />
    <ImageView android:id="@+id/ldap_image" android:src="@drawable/call_site_station_ldap"
    android:layout_width="20dip" android:layout_height="wrap_content"
    android:layout_marginLeft="5dip" android:visibility="invisible" />
    <TextView android:id="@+id/txtSname" android:layout_width="120dip"
    android:layout_marginLeft="5dip" android:singleLine="true"
    android:ellipsize="end" android:textColor="#000000"
    android:layout_height="wrap_content" style="@style/itemSiteNumberStyle" />
    <TextView android:id="@+id/no" android:layout_width="120dip"
    android:singleLine="true" android:ellipsize="end" android:textColor="#000000"
    android:layout_marginLeft="25dip" android:layout_height="wrap_content"
    style="@style/itemSiteNumberStyle" />
    <ImageButton android:id="@+id/ldap_item_save"
    android:background="@drawable/call_save_btn_normal" android:src="@drawable/call_save_icon"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:layout_marginLeft="50dip" />
    <ImageView android:id="@+id/expand" android:src="@drawable/call_site_information"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:layout_marginLeft="15dip" />
    </LinearLayout>
    </LinearLayout>

    </LinearLayout>
      

  2.   

    http://blog.csdn.net/jzf429/article/details/6575660
    给LZ一个链接哈,可以参考一下,就知道啦~~
      

  3.   

    第一你的count 在哪赋值的我们没有看到 第二一般情况count执行都会比你的view个数要多 因为要mesure 比较高度 但是你说的650次 我觉得就有些奇怪了 
      

  4.   

    初始化就赋了个count = 0,的确有些奇怪。现在加载界面有点慢,不知道大家一般一条数据,会加载多少次GetCount方法?。
      

  5.   

    你的count 一直是0是不对的 你给count一个你的具体item的个数的值 比如说 3 你再打印看看
      

  6.   

    不好意思,代码没有贴全:
      /**
             * 设置数据源
             * @param sites
             * @param ldapSites
             */
            public void setData(ArrayList<AbsSiteInfo> sites, ArrayList<LDAPSiteInfo> ldapSites)
            {
                this.sites = sites;
                this.ldapSites.clear();
                if (null != ldapSites)
                {
                    this.ldapSites = ldapSites;
                }
                count = this.sites.size() + this.ldapSites.size();
            }
    现在的问题是数据可以显示出来,但是调用Getcount次数过多,导致在Android的模拟器上显示有些慢。
      

  7.   

    listView 的getCount一般是在notifyDataChanged才会调用
      

  8.   

    数据量?离我的数据量差别好大,我的只有3条数据,但是取了400+次GetCount方法(将父容器的长和宽固定写死),之前没有优化确需要700+次
      

  9.   

    找到原因了,由于XML文件的结构过于复杂造成。层次嵌套太深