网易新闻(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
原创粉丝点击