RecyclerView,ListView,GridView等UI控件使用及其优化和图片错位-->

--------------------------------图片错位问题---------------------------------------

法一:

1:先将图片预设为本地一个占位图片。(重要!很多错位情况在于复用了其他位置的图片缓存,而当前图片迟迟加载不出来,导致当前图片错位。所以解决之道是先用本地占位图片,快速刷新当前图片。等加载完毕之后,就可以替换掉占位图片了。);

2:通过ImageView.setTag,把url记录在图片内部;

3:把url放进一个请求队列,(这是避免图片很大,请求耗时很长,重复发起url请求);

4:如果请求队列存在url,则将老的url对应图片控件,替换为本次请求图片控件,返回;

5.如果当前url和第一步ImageView.getTag一致,则用新的数据源更新图片,否则返回;

6.如果是重复使用的图片,最好就是访问之后,写入到本地存储上,避免耗时网络请求。

法二:

使用弱引用关联(具体操作不太清楚!!!)

法三:

使用Volley框架提供的NetworkImageView:

  private void netRequestImage(){

    ImageLoader loader = new ImageLoader(MyApplication.requestQueue, new ImageLoader.ImageCache() {
      @Override
      public Bitmap getBitmap(String url) {
        return null;
      }

      @Override
      public void putBitmap(String url, Bitmap bitmap) {

      }
    });
    iv3.setDefaultImageResId(R.mipmap.ic_launcher);
    iv3.setErrorImageResId(R.mipmap.ic_launcher);
    iv3.setImageUrl("http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg",loader);
  }

-------------------三种控件的使用----------------------

1、准备数据源

2、新建适配器

3、加载适配器

--------------------------优化问题-----------------------

1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。

2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。

3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。

4、控制线程数量 + 数据分页加载;

5、重写onScrollStateChanged方法;

转载于:https://www.cnblogs.com/aWay01/p/5248965.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值