1

[UPDATE]在ListFragment中創建RSS提要

第一個問題已解決,但尚未打印任何數據。

如果我取消註釋值變量的聲明,並用值替換setAdapter,它工作正常,但從rss提要收到的數據,我不工作。

下面是更新後的代碼:

public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     //  String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
     //    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
     //    "Linux", "OS/2" }; 

     Thread thread = new Thread(new Runnable(){ 
      @Override 
      public void run() { 
       try { 
        URL rssUrl = new URL("http://feeds.feedburner.com/Android-er?format=xml"); 
        SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance(); 
        SAXParser mySAXParser = mySAXParserFactory.newSAXParser(); 
        XMLReader myXMLReader = mySAXParser.getXMLReader(); 
        RSSHandler myRSSHandler = new RSSHandler(); 
        myXMLReader.setContentHandler(myRSSHandler); 
        InputSource myInputSource = new InputSource(rssUrl.openStream()); 
        myXMLReader.parse(myInputSource); 

       } catch (MalformedURLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (ParserConfigurationException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (SAXException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }); 

     thread.start(); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, item); 
     setListAdapter(adapter); 
    } 

我嘗試在ListFragment的列表視圖加載RSS提要。

我收到此錯誤:

構造ArrayAdapter(DernieresNewsFragment,INT, 列表)是未定義

你能幫助我嗎? 這是檢索這樣的XML數據的好方法嗎?

這裏是我的dernieres_news_fragment.xml的代碼:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/dialog_holo_light_frame" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@+id/listview_dernieres_news" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
</RelativeLayout> 

而且我item_list.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/rowtext" 
android:layout_width="fill_parent" 
android:layout_height="25px" 
android:textSize="10sp" /> 

最後我DernieresNewsFragment.java:

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.Attributes; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 
import org.xml.sax.XMLReader; 
import org.xml.sax.helpers.DefaultHandler; 

import android.app.Fragment; 
import android.app.ListFragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 


public class DernieresNewsFragment extends ListFragment { 

    private List<String> item = new ArrayList<String>(); 

    public DernieresNewsFragment() { 
     // Empty constructor required for fragment subclasses 
    } 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.dernieres_news_fragment, container, false); 

     try { 
      URL rssUrl = new URL("http://feeds.feedburner.com/Android-er?format=xml"); 
      SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance(); 
      SAXParser mySAXParser = mySAXParserFactory.newSAXParser(); 
      XMLReader myXMLReader = mySAXParser.getXMLReader(); 
      RSSHandler myRSSHandler = new RSSHandler(); 
      myXMLReader.setContentHandler(myRSSHandler); 
      InputSource myInputSource = new InputSource(rssUrl.openStream()); 
      myXMLReader.parse(myInputSource); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ParserConfigurationException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     ArrayAdapter<String> itemList = new ArrayAdapter<String>(this, R.layout.item_list, item); 
     setListAdapter(itemList); 

     return rootView; 
    } 

    private class RSSHandler extends DefaultHandler { 
     final int stateUnknown = 0; 
     final int stateTitle = 1; 
     int state = stateUnknown; 

     @Override 
     public void startDocument() throws SAXException { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void endDocument() throws SAXException { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void startElement(String uri, String localName, String qName, 
       Attributes attributes) throws SAXException { 
      // TODO Auto-generated method stub 
      if (localName.equalsIgnoreCase("title")) 
      { 
       state = stateTitle; 
      } 
      else 
      { 
       state = stateUnknown; 
      } 
     } 

     @Override 
     public void endElement(String uri, String localName, String qName) 
       throws SAXException { 
      // TODO Auto-generated method stub 
      state = stateUnknown; 
     } 

     @Override 
     public void characters(char[] ch, int start, int length) 
       throws SAXException { 
      // TODO Auto-generated method stub 
      String strCharacters = new String(ch, start, length); 
      if (state == stateTitle) 
      { 
       item.add(strCharacters); 

      } 
     } 
    } 
} 

回答

1

使用此:

ArrayAdapter<String> itemList = new ArrayAdapter<String>(getActivity(), R.layout.item_list, item); 

,而不是這樣的:

ArrayAdapter<String> itemList = new ArrayAdapter<String>(this, R.layout.item_list, item); 

你有一個Context通過。

+0

謝謝,你已經解決了我的問題。但現在,我得到第二個。請諮詢我更新的帖子。 – wawanopoulos