网易新闻(ListView部分)
来源:互联网 发布:英伦风的男装品牌 知乎 编辑:程序博客网 时间:2024/06/05 03:19
1. 服务端----------------------见文件夹
2. 解析服务端的xml文件
3. 图片
4. Item布局:相对布局****
Layout_alignleft: 左对齐
5. Android图像开源视图:SmartImageView
Jar包:http://loopj.com/android-smart-image-view/
特征:
根据URL地址装载图像;
支持装载通讯录中的图像;
支持异步装载;
支持缓存;
6. 动态装布局
LayoutInflater inflater=getLayoutInflater();
view = inflater.inflate(R.layout.listview_item,null);
public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private final int SUCCESS = 0; private final int FAILED = 1;private ListView lvNews;private List<NewInfo> newInfoList; private Handler handler = new Handler() {/** * 接收消息 */@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case SUCCESS:// 访问成功, 有数据// 给Listview列表绑定数据newInfoList = (List<NewInfo>) msg.obj;MyAdapter adapter = new MyAdapter();lvNews.setAdapter(adapter);break;case FAILED:// 无数据Toast.makeText(MainActivity.this, "当前网络崩溃了.", 0).show();break;default:break;}} };@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); }private void init() {lvNews = (ListView) findViewById(R.id.lv_news);// 抓取新闻数据new Thread(new Runnable() {@Overridepublic void run() {// 获得新闻集合List<NewInfo> newInfoList = getNewsFromInternet();Message msg = new Message();if(newInfoList != null) {msg.what = SUCCESS;msg.obj = newInfoList;} else {msg.what = FAILED;}handler.sendMessage(msg);}}).start();}/** * 返回新闻信息 */private List<NewInfo> getNewsFromInternet() {HttpClient client = null;try {// 定义一个客户端client = new DefaultHttpClient();// 定义get方法HttpGet get = new HttpGet("http://192.168.1.254:8080/NetEaseServer/new.xml");// 执行请求HttpResponse response = client.execute(get);int statusCode = response.getStatusLine().getStatusCode();if(statusCode == 200) {InputStream is = response.getEntity().getContent();List<NewInfo> newInfoList = getNewListFromInputStream(is);return newInfoList;} else {Log.i(TAG, "访问失败: " + statusCode);}} catch (Exception e) {e.printStackTrace();} finally {if(client != null) {client.getConnectionManager().shutdown();// 关闭和释放资源}}return null;} /** * 从流中解析新闻集合 * @param is * @return */private List<NewInfo> getNewListFromInputStream(InputStream is) throws Exception {XmlPullParser parser = Xml.newPullParser();// 创建一个pull解析器parser.setInput(is, "utf-8");// 指定解析流, 和编码int eventType = parser.getEventType();List<NewInfo> newInfoList = null;NewInfo newInfo = null;while(eventType != XmlPullParser.END_DOCUMENT) {// 如果没有到结尾处, 继续循环String tagName = parser.getName();// 节点名称switch (eventType) {case XmlPullParser.START_TAG: // <news>if("news".equals(tagName)) {newInfoList = new ArrayList<NewInfo>();} else if("new".equals(tagName)) {newInfo = new NewInfo();} else if("title".equals(tagName)) {newInfo.setTitle(parser.nextText());} else if("detail".equals(tagName)) {newInfo.setDetail(parser.nextText());} else if("comment".equals(tagName)) {newInfo.setComment(Integer.valueOf(parser.nextText()));} else if("image".equals(tagName)) {newInfo.setImageUrl(parser.nextText());}break;case XmlPullParser.END_TAG:// </news>if("new".equals(tagName)) {newInfoList.add(newInfo);}break;default:break;}eventType = parser.next();// 取下一个事件类型}return newInfoList;}class MyAdapter extends BaseAdapter {/** * 返回列表的总长度 */@Overridepublic int getCount() {return newInfoList.size();}/** * 返回一个列表的子条目的布局 */@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = null;if(convertView == null) {LayoutInflater inflater = getLayoutInflater();view = inflater.inflate(R.layout.listview_item, null);} else {view = convertView;}// 重新赋值, 不会产生缓存对象中原有数据保留的现象SmartImageView sivIcon = (SmartImageView) view.findViewById(R.id.siv_listview_item_icon);TextView tvTitle = (TextView) view.findViewById(R.id.tv_listview_item_title);TextView tvDetail = (TextView) view.findViewById(R.id.tv_listview_item_detail);TextView tvComment = (TextView) view.findViewById(R.id.tv_listview_item_comment);NewInfo newInfo = newInfoList.get(position);sivIcon.setImageUrl(newInfo.getImageUrl());// 设置图片tvTitle.setText(newInfo.getTitle());tvDetail.setText(newInfo.getDetail());tvComment.setText(newInfo.getComment() + "跟帖");return view;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}}}
新闻信息实体类
public class NewInfo {private String title; // 标题private String detail; // 详细private Integer comment; // 跟帖数量private String imageUrl; // 图片连接@Overridepublic String toString() {return "NewInfo [title=" + title + ", detail=" + detail + ", comment="+ comment + ", imageUrl=" + imageUrl + "]";}public NewInfo(String title, String detail, Integer comment, String imageUrl) {super();this.title = title;this.detail = detail;this.comment = comment;this.imageUrl = imageUrl;}public NewInfo() {super();// TODO Auto-generated constructor stub}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getDetail() {return detail;}public void setDetail(String detail) {this.detail = detail;}public Integer getComment() {return comment;}public void setComment(Integer comment) {this.comment = comment;}public String getImageUrl() {return imageUrl;}public void setImageUrl(String imageUrl) {this.imageUrl = imageUrl;}}
0 0
- 网易新闻(ListView部分)
- 网易新闻部分框架
- 模仿网易新闻部分界面
- 网易新闻首页效果(ViewPager+Fragment+ListView)
- Android 仿网易新闻 listView下拉刷新
- ListView的应用,模拟网易新闻
- 类网易新闻首页ListView---异步加载ListView图片
- 利用pulltoRefeshListView实现网易新闻首页效果(可以上拉下拉加载的viewpager+listview)
- 网易新闻
- 网易新闻
- 模仿网易新闻客户端(RSS版)
- 仿网易新闻客户端(一)
- 仿网易新闻客户端(二)
- 模仿网易新闻客户端
- 网易新闻主页头部
- 网易wap新闻客户端
- 网易新闻IOS客户端
- 仿网易新闻客户端
- ListView (4)滚动事件/上拉刷新/下拉刷新的实现
- MyEclipse设置编码方式
- I2C驱动
- 4.2
- 2014年终总结–家
- 网易新闻(ListView部分)
- (行为型模式一)模板方法模式
- 多线程实现线程同步——互次对象
- JavaScript技巧45招
- hadoop集群上面安装 spark 1.1.0
- mini2440硬件篇之IIC
- JBoss AS / JBoss EAP / wildfly 区别
- Splay
- python之globals()和locals()