李堇 2022-08-18 10:50 采纳率: 52.8%
浏览 23
已结题

ImageGetter图片重复请求

当页面是有一个列表时,表中展示的是富文本,其中需要展示图片,但是使用中发现图片会随着列表加载出现重复请求现象。

img

//列表加载数据部分代码
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;
    }

}

请求数据:

img

  • 写回答

1条回答 默认 最新

  • 李堇 2022-08-18 14:42
    关注

    一、问题描述

    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

    img

    参考链接:https://www.freesion.com/article/62931081586/

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月18日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染