当页面是有一个列表时,表中展示的是富文本,其中需要展示图片,但是使用中发现图片会随着列表加载出现重复请求现象。
//列表加载数据部分代码
TeacherRecommendPaperDetailAddEqAdapter teacherRecommendPaperDetailAdapter = new TeacherRecommendPaperDetailAddEqAdapter(getContext(), alllist,fManager,treeSet);
listView.setAdapter(teacherRecommendPaperDetailAdapter);
//Adapter加载数据部分代码
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder(mContext, parent, R.layout.item_list_ai_error_question_collect_add_eq, position);
//LogUtils.e("=1=","mDatas:" + mDatas);
//LogUtils.e("=1=","position:" + position);
//holder.setText(R.id.itemNo, "错题" + (position + 1));
//holder.setText(R.id.questionStem, Html.fromHtml(mDatas.get(position).getQuestionStem()));
imgGetter = new NetworkImageGetter2(context);
//LogUtils.e("=1=","questiontemConvert:" + mDatas.get(position).getQuestionStemConvert());
holder.setText(R.id.questionStem,Html.fromHtml(mDatas.get(position).getQuestionStemConvert(),Html.FROM_HTML_MODE_COMPACT,imgGetter,null));
//添加或删除按钮
View addOrDelete = holder.getView(R.id.addOrDelete);
addOrDelete.setOnClickListener(new TeacherRecommendPaperDetailAddEqAdapter.myOnClickListener(holder,mDatas.get(position),"0001"));
return holder.getConvertView();
}
//ImageGetter实现类
public class NetworkImageGetter2 implements Html.ImageGetter{
private Context mContext;
public NetworkImageGetter2(Context context){
mContext = context;
}
@Override
public Drawable getDrawable(String source) {
Drawable drawable = null;
try {
URL url;
url = new URL(source);
//drawable = Drawable.createFromStream(url.openStream(), ""); // 获取网路图片
LogUtils.e("=source=",source);
drawable = Drawable.createFromResourceStream(mContext.getResources(), null, url.openStream(), "src", null);
int with = Math.round(drawable.getIntrinsicWidth()*0.6f);
int higth = Math.round(drawable.getIntrinsicHeight()*0.6f);
//LogUtils.e("==","higth:" + higth+"--with:"+with);
drawable.setBounds(0, 0, with,higth);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return drawable;
}
}
请求数据:
一、问题描述
ListView显示数据时,自定义了一个适配器(extends BaseAdapter),然后重写了getView方法,现在出现一个问题,就是这个getView()方法被重复调用了,比如我的_data中有两条数据,但是log.i("show",house.toString());这句却被执行了4次甚至更多。
二、原因分析
getView()被调用的次数取决于当前屏幕能显示的item的数量,显示一个item就调用一次。当listview的layout_height属性是wrap_content时,有可能造成listview无法计算高度,相应的需要显示的item数量就无法计算,造成getView多次被调用。
三、解决办法
1、ListView重复调用getView解决办法:
ListView布局时height和width都不是match_parent,导致不断计算高度,不断刷新。或者说它的父容器没有设置成match_parent. 我们只需要设置ListView为固定宽高即可。注意:如果还是不行,记得查看是否是父容器没有设置为match_parent