BaseAdapter中的GetCount方法频繁调用,请高手看看

coolbobo 2011-11-11 11:55:48
只有三条数据,但是调用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();
}
...全文
716 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小小雨 2012-09-11
  • 打赏
  • 举报
回复
楼主 我也遇到你的问题了 有资料推荐下吗? 谢谢啦 求你啦
coolbobo 2012-03-27
  • 打赏
  • 举报
回复
找到原因了,由于XML文件的结构过于复杂造成。层次嵌套太深
coolbobo 2011-11-15
  • 打赏
  • 举报
回复
数据量?离我的数据量差别好大,我的只有3条数据,但是取了400+次GetCount方法(将父容器的长和宽固定写死),之前没有优化确需要700+次
yanjichao2010 2011-11-14
  • 打赏
  • 举报
回复
正常是跟你的数据量差不多的,差不了多少
haoyizsw 2011-11-14
  • 打赏
  • 举报
回复
listView 的getCount一般是在notifyDataChanged才会调用
coolbobo 2011-11-14
  • 打赏
  • 举报
回复
不好意思,代码没有贴全:
/**
* 设置数据源
* @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的模拟器上显示有些慢。
libRA_kin 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 coolbobo 的回复:]
初始化就赋了个count = 0,的确有些奇怪。现在加载界面有点慢,不知道大家一般一条数据,会加载多少次GetCount方法?。

引用 4 楼 libra_kin 的回复:
第一你的count 在哪赋值的我们没有看到 第二一般情况count执行都会比你的view个数要多 因为要mesure 比较高度 但是你说的650次 我觉得就有些奇怪了
[/Quote]
你的count 一直是0是不对的 你给count一个你的具体item的个数的值 比如说 3 你再打印看看
coolbobo 2011-11-11
  • 打赏
  • 举报
回复
除上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>
coolbobo 2011-11-11
  • 打赏
  • 举报
回复
初始化就赋了个count = 0,的确有些奇怪。现在加载界面有点慢,不知道大家一般一条数据,会加载多少次GetCount方法?。
[Quote=引用 4 楼 libra_kin 的回复:]
第一你的count 在哪赋值的我们没有看到 第二一般情况count执行都会比你的view个数要多 因为要mesure 比较高度 但是你说的650次 我觉得就有些奇怪了
[/Quote]
libRA_kin 2011-11-11
  • 打赏
  • 举报
回复
第一你的count 在哪赋值的我们没有看到 第二一般情况count执行都会比你的view个数要多 因为要mesure 比较高度 但是你说的650次 我觉得就有些奇怪了
Listening_music 2011-11-11
  • 打赏
  • 举报
回复
http://blog.csdn.net/jzf429/article/details/6575660
给LZ一个链接哈,可以参考一下,就知道啦~~
coolbobo 2011-11-11
  • 打赏
  • 举报
回复
自己顶一下

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧