J'ai créé un lecteur RSS qui répertorie les éléments dans une vue de liste. Je veux également une date en dessous de chaque élément, mais je ne sais pas comment faire. J'ai besoin de l'aide de quelqu'un pour que le texte du sous-élément affiche la date de publication qui a été extraite du flux RSS.
Voici le code que j'ai pour ma classe:
public class RSSReader extends Activity implements OnItemClickListener
{
public final String RSSFEEDOFCHOICE = "http://app.calvaryccm.com/mobile/Android/v1/devos";
public final String tag = "RSSReader";
private RSSFeed feed = null;
/** Called when the activity is first created. */
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
// go get our feed!
feed = getFeed(RSSFEEDOFCHOICE);
// display UI
UpdateDisplay();
}
private RSSFeed getFeed(String urlToRssFeed)
{
try
{
// setup the url
URL url = new URL(urlToRssFeed);
// create the factory
SAXParserFactory factory = SAXParserFactory.newInstance();
// create a parser
SAXParser parser = factory.newSAXParser();
// create the reader (scanner)
XMLReader xmlreader = parser.getXMLReader();
// instantiate our handler
RSSHandler theRssHandler = new RSSHandler();
// assign our handler
xmlreader.setContentHandler(theRssHandler);
// get our data via the url class
InputSource is = new InputSource(url.openStream());
// perform the synchronous parse
xmlreader.parse(is);
// get the results - should be a fully populated RSSFeed instance, or null on error
return theRssHandler.getFeed();
}
catch (Exception ee)
{
// if we have a problem, simply return null
System.out.println(ee.getMessage());
System.out.println(ee.getStackTrace());
System.out.println(ee.getCause());
return null;
}
}
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, 0, 0, "Refresh");
Log.i(tag,"onCreateOptionsMenu");
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case 0:
Log.i(tag,"Set RSS Feed");
return true;
case 1:
Log.i(tag,"Refreshing RSS Feed");
return true;
}
return false;
}
private void UpdateDisplay()
{
TextView feedtitle = (TextView) findViewById(R.id.feedtitle);
TextView feedpubdate = (TextView) findViewById(R.id.feedpubdate);
ListView itemlist = (ListView) findViewById(R.id.itemlist);
if (feed == null)
{
feedtitle.setText("No RSS Feed Available");
return;
}
if(feedtitle != null)
feedtitle.setText(feed.getTitle());
if(feedpubdate != null)
feedpubdate.setText(feed.getPubDate());
ArrayAdapter<RSSItem> adapter = new ArrayAdapter<RSSItem>(this,Android.R.layout.simple_list_item_1,feed.getAllItems());
itemlist.setAdapter(adapter);
itemlist.setOnItemClickListener(this);
itemlist.setSelection(0);
}
@Override
public void onItemClick(AdapterView parent, View v, int position, long id)
{
//Log.i(tag,"item clicked! [" + feed.getItem(position).getTitle() + "]");
Intent itemintent = new Intent(this,ShowDescription.class);
Bundle b = new Bundle();
b.putString("title", feed.getItem(position).getTitle());
b.putString("description", feed.getItem(position).getDescription());
b.putString("link", feed.getItem(position).getLink());
b.putString("pubdate", feed.getItem(position).getPubDate());
itemintent.putExtra("Android.intent.extra.INTENT", b);
startActivity(itemintent);
}
}
Voici mon XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Android RSSReader"
Android:id="@+id/feedtitle"/>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text=""
Android:id="@+id/feedpubdate"/>
<ListView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:id="@+id/itemlist"
Android:fastScrollEnabled="true"/>
</LinearLayout>
Voici à quoi cela ressemble maintenant dans Eclipse:
Voici à quoi cela ressemble de courir:
Comment faire pour que le texte du sous-élément affiche la date de publication qui a été extraite du flux RSS?
Vous devriez avoir un fichier item_list.xml comme celui-ci:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:padding="6dp" >
<TextView
Android:id="@+id/page_title"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textColor="#D8000000"
Android:textSize="16sp"
Android:textStyle="bold" />
<TextView
Android:id="@+id/page_date"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_below="@id/page_title"
Android:ellipsize="Marquee"
Android:lines="3"
Android:marqueeRepeatLimit="Marquee_forever"
Android:textColor="#D8000000"
Android:textSize="12sp" />
</RelativeLayout>
et dans votre listadapter dans la méthode getview:
View row = convertView;
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row = inflater.inflate(R.layout.item_list, parent, false);
TextView listTitle = (TextView) row.findViewById(R.id.page_title);
listTitle.setText(title);
TextView date = (TextView) row.findViewById(R.id.page_date);
date.setText( <here put your date from RSS feed>);
return row;
cela devrait le faire!
Étant donné que vous souhaitez mapper plusieurs éléments de données à plusieurs vues, vous ne pouvez pas utiliser un ArrayAdapter. Vous devrez utiliser un SimpleAdapter à la place.
De plus, j'ai remarqué que vous obtenez le flux RSS sur le fil principal de l'interface utilisateur. Cela va entraîner une non-réponse de votre application. Si vous ne savez pas de quoi je parle, jetez un coup d'œil à l'article Filetage indolore (je considère que c'est une lecture incontournable pour tout développeur Android développeur). Ce que vous devez faire à la place est d'utiliser un Loader . Ils ont été conçus pour exactement votre type de situation. Bien qu'ils n'aient été introduits qu'après API-10, vous pouvez toujours les utiliser à des niveaux d'API inférieurs via le - Support Package .
créer une liste personnalisée --- http://saigeethamn.blogspot.com/2010/04/custom-listview-Android-developer.html