博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 75 新闻列表页面
阅读量:6951 次
发布时间:2019-06-27

本文共 8818 字,大约阅读时间需要 29 分钟。

new.xml

黑马52期就业快报
热烈祝贺黑马52期平均薪水突破13k
15687
http://192.168.1.100:8080/images/6.jpg
程序员因写代码太乱被杀害
凶手是死者同事,维护死者代码时完全看不懂而痛下杀手
16359
http://192.168.1.100:8080/images/7.jpg
产品经理因频繁改需求被杀害
凶手是一名程序员,因死者对项目需求频繁改动而痛下杀手
14112
http://192.168.1.100:8080/images/7.jpg
3Q大战宣判: 腾讯获赔500万
最高法驳回360上诉, 维持一审宣判.
6427
http://192.168.1.100:8080/images/1.jpg
今日之声:北大雕塑被戴口罩
市民: 因雾霾起诉环保局; 公务员谈"紧日子": 坚决不出去.
681
http://192.168.1.100:8080/images/2.jpg
奥巴马见是装蒜
外文局: 国际民众认可中国大国地位;法院: "流量清零"未侵权.
1359
http://192.168.1.100:8080/images/3.jpg
轻松一刻: 我要沉迷学习不自拔
放假时我醒了不代表我起床了, 如今我起床了不代表我醒了!
11616
http://192.168.1.100:8080/images/4.jpg
男女那些事儿
"妈, 我在东莞被抓, 要2万保释金, 快汇钱到xxx!"
10339
http://192.168.1.100:8080/images/5.jpg
赵帅哥语录一
少壮不努力,老大做IT
14612
http://192.168.1.100:8080/images/8.jpg
赵帅哥语录二
问君能有几多愁,恰似调完代码改需求
13230
http://192.168.1.100:8080/images/8.jpg
赵帅哥语录三
觉得我帅的人工资一般都比较高
9928
http://192.168.1.100:8080/images/8.jpg
今日之声:北大雕塑被戴口罩
市民: 因雾霾起诉环保局; 公务员谈"紧日子": 坚决不出去.
681
http://192.168.1.100:8080/images/2.jpg
奥巴马见是装蒜
外文局: 国际民众认可中国大国地位;法院: "流量清零"未侵权.
1359
http://192.168.1.100:8080/images/3.jpg

 主页面:

条目:

Activity:

package com.itheima.xiaozhinews;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import com.itheima.xiaozhinews.domain.News;import com.loopj.android.image.SmartImageView;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.util.Xml;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {    List
newsList; Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { ListView lv = (ListView) findViewById(R.id.lv); lv.setAdapter(new MyAdapter()); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getNewsInfo();//下载新闻xml// ListView lv = (ListView) findViewById(R.id.lv);// //要保证在设置适配器时,新闻xml文件已经解析完毕了// lv.setAdapter(new MyAdapter()); } class MyAdapter extends BaseAdapter{ //得到模型层中元素的数量,用来确定listview需要有多少个条目 @Override public int getCount() {
//lv.setAdapter执行的时候就会调用getCount方法就会调用getView方法, //所以要不保证lv.setAdapter执行的时候newsList已经初始化好了,不然就会有空指针, //因此lv.setAdapter执行在子线程中的newsList初始化之后, //由于lv.setAdapter是修改UI所以只能通过子线程发送消息给主线程进行UI修改 return newsList.size(); } @Override //返回一个View对象,作为listview的条目显示至界面 public View getView(int position, View convertView, ViewGroup parent) { News news = newsList.get(position); View v = null; ViewHolder mHolder; if(convertView == null){ v = View.inflate(MainActivity.this, R.layout.item_listview, null); mHolder = new ViewHolder(); //把布局文件中所有组件的对象封装至ViewHolder对象中 mHolder.tv_title = (TextView) v.findViewById(R.id.tv_title); mHolder.tv_detail = (TextView) v.findViewById(R.id.tv_detail); mHolder.tv_comment = (TextView) v.findViewById(R.id.tv_comment); mHolder.siv = (SmartImageView) v.findViewById(R.id.iv); //把ViewHolder对象封装至View对象中 v.setTag(mHolder); } else{ v = convertView; mHolder = (ViewHolder) v.getTag(); } //利用缓存就不用执行findViewById mHolder.tv_title.setText(news.getTitle()); mHolder.tv_detail.setText(news.getDetail()); mHolder.tv_comment.setText(news.getComment() + "条评论"); //给新闻图片imageview设置内容 mHolder.siv.setImageUrl(news.getImageUrl()); return v;//返回v所以缓存为View } class ViewHolder{ //条目的布局文件中有什么组件,这里就定义什么属性 TextView tv_title; TextView tv_detail; TextView tv_comment; SmartImageView siv; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } } private void getNewsInfo() { Thread t = new Thread(){ @Override public void run() { String path = "http://192.168.13.13:8080/news.xml"; try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000);//连接超时 conn.setReadTimeout(5000);//读取超时 //发送http GET请求,获取相应码 if(conn.getResponseCode() == 200){ InputStream is = conn.getInputStream(); //使用pull解析器,解析这个流 parseNewsXml(is);//之前是文件输入流,这里直接用服务端的流是一样的, } } catch (Exception e) { e.printStackTrace(); } } }; t.start(); } private void parseNewsXml(InputStream is) { XmlPullParser xp = Xml.newPullParser(); try { xp.setInput(is, "utf-8"); //对节点的事件类型进行判断,就可以知道当前节点是什么节点 int type = xp.getEventType(); News news = null; while(type != XmlPullParser.END_DOCUMENT){ switch (type) { case XmlPullParser.START_TAG: if("newslist".equals(xp.getName())){ newsList = new ArrayList
(); } else if("news".equals(xp.getName())){ news = new News(); } else if("title".equals(xp.getName())){ String title = xp.nextText(); news.setTitle(title); } else if("detail".equals(xp.getName())){ String detail = xp.nextText(); news.setDetail(detail); } else if("comment".equals(xp.getName())){ String comment = xp.nextText(); news.setComment(comment); } else if("image".equals(xp.getName())){ String image = xp.nextText(); news.setImageUrl(image); } break; case XmlPullParser.END_TAG: if("news".equals(xp.getName())){ newsList.add(news); } break; } //解析完当前节点后,把指针移动至下一个节点,并返回它的事件类型 type = xp.next(); } //发消息,让主线程设置listview的适配器,如果消息不需要携带数据,可以发送空消息系统自动创建消息。 handler.sendEmptyMessage(1); } catch (Exception e) { e.printStackTrace(); } }}

 

转载地址:http://svkil.baihongyu.com/

你可能感兴趣的文章
tee指令的妙用
查看>>
前端相关校验
查看>>
PostgreSQL 在路上的特性 - 远离触发器, 拥抱内置分区
查看>>
如何利用Photoshop扣取图片上的字体(一)
查看>>
jsp fmt标签详解
查看>>
Springmvc案例1----基于spring2.5的采用xml配置
查看>>
创建自定义数据源
查看>>
嵌入式linux------SDL移植(am335x下显示yuv420)
查看>>
【原创】erlang 模块之 epmd
查看>>
备用java方法
查看>>
有状态的 web 应用
查看>>
System V 消息队列
查看>>
管道和FIFO
查看>>
Android学习笔记(3):Android项目结构分析
查看>>
openlayers加载切片地图
查看>>
【Android开发】布局管理器-相对布局
查看>>
A Case about cursor_sharing=FORCE can introduce a execute plan stale
查看>>
[技术点]SQL 多条件查询
查看>>
PHP进阶~1
查看>>
thinking about application known or un-known distributed storage
查看>>