我有一个ListView,它在每一行显示从互联网上提取的图像和一个字符串.
一般来说它工作正常.但是我希望控制视图(行)膨胀的方式.默认情况下,当行可见时,将调用适配器的getView()方法.
这当然不是最好的行为之一,因为如果我有一个包含数百条记录的ListView,并且我需要到达底部的那些,在滚动ListView时,将为每一行调用getView()方法,直到我到了页脚.
所以我想在滚动之后调用getView并且ListView处于暂停/空闲状态,但我不知道如何解决这个问题:
这是我开始的方式:
listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view,int scrollState) { if(scrollState==SCROLL_STATE_IDLE){ // Invoke get view only on visible items } } @Override public void onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount) { } });
这是我的适配器的getView:
@Override public View getView(int position,View convertView,ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.row,parent,false); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.textView); holder.image = (ImageView) convertView.findViewById(R.id.imageView); holder.position = position; convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.title.setText(data.get(position).getTitle()); holder.image.setImageResource(R.drawable.ic_launcher); new LoadImageAsync(data.get(position).getUrl(),holder.image).execute(); return convertView; }
请给我一些指示,看看我应该在哪里实现这一点:只在滚动后调用getView(),并且仅针对可见项目.