简易新闻app(下)之BitMapUtils及ListView的使用
来源:互联网 发布:nvidia windows xp 编辑:程序博客网 时间:2024/05/21 07:12
简易新闻app(下)之BitMapUtils及ListView的使用
- BitMapUtils是xutils用于imageView显示的一个常用工具类,这里用来展示新闻的图片。
- ListView则用来展示服务器新闻列表。
代码示例
Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { ListView lvList = (ListView) findViewById(R.id.lv_list); lvList.setAdapter(new MyAdapter()); } };
我们在接收到解析服务器线程解析完成后的消息后再做一个ListView的列表来显示新闻数据。
class MyAdapter extends BaseAdapter{ private BitmapUtils bitmapUtils; public MyAdapter(){ bitmapUtils = new BitmapUtils(getApplicationContext()); } @Override public int getCount() { return listNews.size(); } @Override public News getItem(int position) { return listNews.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(getApplicationContext(), R.layout.item_news_list, null); holder = new ViewHolder(); holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title); holder.tvDetail = (TextView) convertView.findViewById(R.id.tv_detail); holder.tvComment = (TextView) convertView.findViewById(R.id.tv_comment); holder.ivImage = (ImageView) convertView.findViewById(R.id.iv_image); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } News news = getItem(position); holder.tvTitle.setText(news.getTitle()); holder.tvDetail.setText(news.getDetail()); holder.tvComment.setText(news.getComment()); bitmapUtils.display(holder.ivImage, news.getImageUrl()); return convertView; } } static class ViewHolder{ public TextView tvTitle; public TextView tvDetail; public TextView tvComment; public ImageView ivImage; }
这是一个listView适配器的标准写法,我们在项目中会经常用到。
首先我们在这个adapter的构造方法里创建一个bitmaputils对象,用来显示服务器的图像数据。这是后面显示图像的代码
bitmapUtils.display(holder.ivImage, news.getImageUrl());
它显示一个imageView非常简单,我们先要传入一个imageview的显示位置:holder.ivImage
holder.ivImage = (ImageView) convertView.findViewById(R.id.iv_image);
显然,holder.ivImage就是我们在布局文件里的imageview,下面是这个布局文件的相关代码
<ImageView android:id="@+id/iv_image" android:layout_width="70dp" android:layout_height="70dp" android:src="@drawable/ic_launcher" android:layout_centerVertical="true" />
我们传入的第二个参数就是从服务器获取的图片url路径:news.getImageUrl()。传入这两个参数后,就可以正常显示服务器的图片了。
下面就是listview的适配器写法了,这里所谓的adapter其实就是告诉系统:我们要显示在listview里面的item的一些具体信息,这些信息包括:
item的数量:即我们从服务器端获取的加载到集合listNews里news的个数
@Overridepublic int getCount() { return listNews.size();}
每个item应该返回一个什么样的数据:我们返回集合listNews里的news
@Overridepublic News getItem(int position) { return listNews.get(position);}
每个item对应的id,当出现一些非常规的item(如只是用来分割作用的,后面会介绍到),我们一般就返回一个position的调整值,从而能更加方便的get到相关的item
@Overridepublic long getItemId(int position) { return position;}
每个item具体怎么显示(重要)
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if(convertView == null){ convertView = View.inflate(getApplicationContext(), R.layout.item_news_list, null); holder = new ViewHolder(); holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title); holder.tvDetail = (TextView) convertView.findViewById(R.id.tv_detail); holder.tvComment = (TextView) convertView.findViewById(R.id.tv_comment); holder.ivImage = (ImageView) convertView.findViewById(R.id.iv_image); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } News news = getItem(position); holder.tvTitle.setText(news.getTitle()); holder.tvDetail.setText(news.getDetail()); holder.tvComment.setText(news.getComment()); bitmapUtils.display(holder.ivImage, news.getImageUrl()); return convertView; }}static class ViewHolder{ public TextView tvTitle; public TextView tvDetail; public TextView tvComment; public ImageView ivImage;}
convertView是我们填充的一个item布局(即我们先把想要显示的item用一个布局文件画出来):R.layout.item_news_list
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" > <ImageView android:id="@+id/iv_pic" android:layout_width="70dp" android:layout_height="70dp" android:scaleType="centerCrop" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/image_demo" /> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginLeft="20dp" android:layout_toRightOf="@+id/iv_pic" android:text="新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题" android:maxLines="2" android:ellipsize="end" android:textColor="#000" android:textSize="20sp" /> <TextView android:id="@+id/tv_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@id/tv_title" android:layout_alignBottom="@id/iv_pic" android:layout_marginTop="10dp" android:text="2011-10-18 10:38" android:textSize="16sp" android:textColor="@android:color/darker_gray" /></RelativeLayout>
我们把convertView里的各个组件找到,然后放到一个静态类ViewHolder里去。这样做的好处就是我们只需要一次的findViewById,以后我们就直接拿ViewHolder里的数据来设置相关的内容了。
- 简易新闻app(下)之BitMapUtils及ListView的使用
- 简易新闻app(上)之xml文件解析
- Xutils之BitmapUtils使用
- BitmapUtils 的使用
- Android Xutils框架使用之BitmapUtils
- 从零开始打造一个新闻订阅APP之Android篇(二、从“逛”页面谈谈多种格式listview的实现细节)
- xUtils中BitmapUtils模块的使用实例
- 安卓仿手机网易新闻app项目开发系列之(三)数据抓取和解析 下
- App列表之拖拽ListView(下)
- App列表之拖拽ListView(下)
- 使用mvc模型实现简易新闻客户端功能(本地)
- 网络编程之开源项目和JSON解析技术的使用——简易新闻客户端
- android图片加载导致的OOM分析及有效解决办法(BitmapUtils)
- Jsoup抓取网页数据完成一个简易的Android新闻APP
- Jsoup抓取网页数据完成一个简易的Android新闻APP
- AsyncHttpClient和SmartImageView的使用及案例(新闻客户端)
- 简单的自定义圆形图片(不能与BitmapUtils一起使用)
- 第一章,listview的简易用法(Android)
- POJ-1065 Wooden Sticks,排序+最长单减子序列!
- 算法提高 数组输出
- 重装系统的第一天之配置环境
- 使用gcc工具链进行Linux环境下的stm32开发
- 试玩
- 简易新闻app(下)之BitMapUtils及ListView的使用
- ASP.NET调用DLL
- 如何入门深度学习
- iplImage 和 Mat 转换
- Mac下面使用Intellij Idea部署应用出现 java.net.MalformedURLException:
- 遍历map的四种方法
- 算法提高 统计平均成绩
- 有意思的Java代码
- Java8配置环境变量——window