ListView异步加载图片出现图片错位的解决方案
来源:互联网 发布:天意网络魔域一条龙 编辑:程序博客网 时间:2024/06/05 05:05
private XListView xlistview; private int index = 1; /** * listview中view复用并异步加载图片时,有可能滚出屏幕的图片加载过慢, * 导致回收利用的view会显示前面还没有加载完的图片,这样就出现了图片错位 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); xlistview = (XListView) findViewById(R.id.xlistview); getData("http://apis.juhe.cn/cook/query.php", index + "", "20"); } private void getData(String path, String pn, String rn) { new AsyncTask<String, Void, String>() { @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (s != null) { System.out.println("请求到的数据+" + s); Gson gson = new Gson(); MenuInfo info = gson.fromJson(s, MenuInfo.class); List<MenuInfo.ResultBean.DataBean> list = info.getResult().getData(); MyBaseAdapter adapter = new MyBaseAdapter(list, MainActivity.this); xlistview.setAdapter(adapter); } } @Override protected String doInBackground(String... params) { try { String path = params[0]; String pn = params[1]; String rn = params[2]; URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); OutputStream os = connection.getOutputStream(); os.write(("menu=猪肉炖粉条&key=XXXXXXXXXX&pn=" + pn + "&rn=" + rn).getBytes()); os.flush(); os.close(); if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream is = connection.getInputStream(); return StringTools.getJson(is); } } catch (Exception e) { e.printStackTrace(); } return null; } }.execute(path, pn, rn); }
public class MyBaseAdapter extends BaseAdapter { private List<MenuInfo.ResultBean.DataBean> list; private Context context; public MyBaseAdapter(List<MenuInfo.ResultBean.DataBean> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list != null ? list.size() : 0; } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = View.inflate(context, R.layout.item, null); holder = new ViewHolder(); holder.img = (ImageView) convertView.findViewById(R.id.img); holder.tv = (TextView) convertView.findViewById(R.id.textview); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv.setText(list.get(position).getIngredients());// 为了解决图片错位,预先加载一个标签 holder.img.setTag(list.get(position).getAlbums().get(0));// 自定义方法设置图片 setImageView(holder.img, position, list.get(position).getAlbums().get(0));// 为了解决图片错位,设置完图片以后把图片设置成空,或者设置成默认图片 holder.img.setImageResource(R.mipmap.loading); return convertView; } class ViewHolder { ImageView img; TextView tv; } private void setImageView(final ImageView img, int position, final String path) { new AsyncTask<String, Void, Bitmap>() { @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (bitmap != null) {// 为了解决图片错位, 判断一下这里的图片路劲和我们之前设置的图片的Tag的路劲是否一样// 如果一样就加载图片,如果不一样就不加载,就不会造成图片错位 if (img.getTag() != null && path.equals(img.getTag())) img.setImageBitmap(bitmap); } else { img.setImageResource(R.mipmap.ic_launcher_round); } } @Override protected Bitmap doInBackground(String... params) { try { URL url = new URL(params[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream is = connection.getInputStream(); return BitmapFactory.decodeStream(is); } } catch (Exception e) { e.printStackTrace(); } return null; } }.execute(path); }}}
阅读全文
2 0
- ListView异步加载图片出现图片错位的解决方案
- ListView异步加载图片时出现错位的解决方案
- Android ListView异步加载图片错位解决方案一 使用findViewWithTag
- android listview 异步加载图片时出现图片错位、刷新问题的简单解决
- Android ListView图片异步加载时,图片错位的问题
- listview异步加载图片并防止错位
- Android ListView异步加载图片错位问题
- 安卓ListView图片异步加载错位的处理
- Android ListView 异步加载图片错位的问题
- Android ListView 异步加载图片错位的问题
- Android ListView 异步加载图片错位的问题
- ListView加载图片的错位解决方案(二)
- Listview 设置两列异步加载网络图片,结果出现图片显示错位
- ListView异步加载图片--图片缓存和错位问题解决方案
- ListView异步加载图片--图片缓存和错位问题解决方案
- 使用Volley的imageRequest加载图片实例(含listview异步加载图片错位问题)
- android listview异步加载图片错位,重复,闪烁分析以及解决方案
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
- Spring复习笔记
- java中的控制流语句
- C++基础-多态
- 电脑软键盘效果
- C#编程入门_简单算法_15
- ListView异步加载图片出现图片错位的解决方案
- Android 调用系统相机部分源码分析
- 数组常用方法
- Lightoj 1122【计数DP】
- MySQL连接失败:Can't connect to MySQL server on '127.0.0.1'
- NIO
- Redis 事务
- CodeForces 3 D.Least Cost Bracket Sequence(贪心+优先队列)
- 如何在字符串的长时间("2017-07-18 00:00:00")上对短时间("yyyy-mm-dd")分组和排序