前面两部分分别讲了RSS概述解析XML文件,本节讲解怎样在列表中显示RSS内容。

       首先修改main.java文件,调用前面的类,由intentert获取rss列表并显示在UI上:

Java代码
  1. public final String RSS_URL = "http://blog.sina.com.cn/rss/1267454277.xml";//从网络获取RSS地址   
  2. public final String tag = "RSSReader";   
  3. private RSSFeed feed = null;   
  4.   
  5. /** Called when the activity is first created. */  
  6.   public void onCreate(Bundle icicle) {   
  7.         super.onCreate(icicle);   
  8.         setContentView(R.layout.main);   
  9.         feed = getFeed(RSS_URL);//调用getFeed方法,从服务器取得rss提要   
  10.         showListView();     //把rss内容绑定到ui界面进行显示   
  11.          }   
  12. private RSSFeed getFeed(String urlString)  //该方法通过url获得xml并解析xml内容为RSSFeed对象   
  13.     {   
  14.      try  
  15.      {   
  16.         URL url = new URL(urlString);   
  17.           SAXParserFactory factory = SAXParserFactory.newInstance();   
  18.            SAXParser parser = factory.newSAXParser();   
  19.            XMLReader xmlreader = parser.getXMLReader();   
  20.            RSSHandler rssHandler = new RSSHandler();   
  21.            xmlreader.setContentHandler(rssHandler);   
  22.           InputSource is = new InputSource(url.openStream());       
  23.            xmlreader.parse(is);   
  24.           return rssHandler.getFeed();   
  25.      }   
  26.      catch (Exception ee)   
  27.      {   
  28. return null;   
  29.      }   
  30.     }   
  31.  private void showListView()   
  32.     {   
  33.         ListView itemlist = (ListView) findViewById(R.id.itemlist);        
  34.         if (feed == null)   
  35.         {   
  36.          setTitle("访问的RSS无效");   
  37.          return;   
  38.         }   
  39.   
  40.   SimpleAdapter adapter = new SimpleAdapter(this, feed.getAllItemsForListView(),   
  41.          android.R.layout.simple_list_item_2, new String[] { RSSItem.TITLE,RSSItem.PUBDATE },   
  42.          new int[] { android.R.id.text1 , android.R.id.text2});   
  43.         itemlist.setAdapter(adapter);  //listview绑定适配器   
  44.         itemlist.setOnItemClickListener(this);  //设置itemclick事件代理   
  45.         itemlist.setSelection(0);   
  46.            
  47.     }   
  48.        
  49.      public void onItemClick(AdapterView parent, View v, int position, long id)   //itemclick事件代理方法   
  50.      {   
  51.       Intent itemintent = new Intent(this,ActivityShowDescription.class);//构建一个“意图”,用于指向activity :detail   
  52.           Bundle b = new Bundle();  //构建buddle,并将要传递参数都放入buddle   
  53.       b.putString("title", feed.getItem(position).getTitle());   
  54.       b.putString("description", feed.getItem(position).getDescription());   
  55.       b.putString("link", feed.getItem(position).getLink());   
  56.       b.putString("pubdate", feed.getItem(position).getPubDate());   
  57.        itemintent.putExtra("android.intent.extra.rssItem", b);    //用android.intent.extra.INTENT的名字来传递参数   
  58.          startActivityForResult(itemintent, 0);   
  59.      }   
  60.        
  61. }  

       到此,程序已经可以显示第1个Activity(页面)了。但由于程序使用了网络,我们还必须在AndroidManifest.xml中增加使用网络的权限。

       当我们点击一个item的时候,页面要跳转到另一个Activity,用来展现item里面的内容,所以需要建立一个新的Activity:ActivityShowDescription。

Java代码
  1. public class ActivityShowDescription extends Activity {   
  2. public void onCreate(Bundle icicle) {   
  3. super.onCreate(icicle);   
  4. setContentView(R.layout.showdescription);   
  5. String content = null;   
  6. Intent startingIntent = getIntent();   
  7.   
  8.   
  9. if (startingIntent != null) {   
  10. Bundle bundle = startingIntent   
  11. .getBundleExtra("android.intent.extra.rssItem");   
  12. if (bundle == null) {   
  13. content = "不好意思程序出错啦";   
  14. else {   
  15. content = bundle.getString("title") + "\n\n"  
  16. + bundle.getString("pubdate") + "\n\n"  
  17. + bundle.getString("description").replace('\n'' ')   
  18. "\n\n详细信息请访问以下网址:\n" + bundle.getString("link");   
  19. }   
  20. else {   
  21. content = "不好意思程序出错啦";    
  22. }   
  23.    
  24. TextView textView = (TextView) findViewById(R.id.content);   
  25. textView.setText(content);   
  26.    
  27. Button backbutton = (Button) findViewById(R.id.back);   
  28.    
  29. backbutton.setOnClickListener(new Button.OnClickListener() {   
  30. public void onClick(View v) {   
  31. finish();   
  32. }   
  33. });   
  34. }   
  35. }  

       它对应的xml文件如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView     
  8.     android:layout_width="fill_parent"    
  9.     android:layout_height="wrap_content"    
  10.     android:autoLink="all"  
  11.     android:text=""  
  12.     android:id="@+id/content"  
  13.     android:layout_weight="1.0"  
  14.     />  
  15. <Button  
  16.     android:layout_width="fill_parent"    
  17.     android:layout_height="wrap_content"    
  18.     android:text="返回"  
  19. android:id="@+id/back"  
  20. />       
  21. </LinearLayout>  

       此外还需要在AndroidMainfest.xml里添加<activity android:name=".ActivityShowDescription"></activity>

       这样我们就完成了这个RSS客户端小程序,运行效果如下:

Android RSS客户端显示列表

Android RSS订阅详细信息

       Android系统中RSS客户端的开发还不算很难吧?以后我们可以做自己的Android RSS阅读器了。

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/example/147.html
2012年8月6日
发布:鸡啄米 分类:Android开发实例 浏览: 评论:0