在Android中使用TextView获取RSS提要行项目的值
我正在尝试构建一个Android应用程序,它可以显示几个RSS提要,我想只显示标题和日期的RSS提要,然后让用户点击它们来查看完整的故事。目前,我正在将RSS行值作为其行文本视图中的意图附加项传递。然而,我不能没有故事文本视图,但仍然可以将这些数据作为额外的意图传递。以下是我代码的相关部分:在Android中使用TextView获取RSS提要行项目的值,android,android-intent,rss,Android,Android Intent,Rss,我正在尝试构建一个Android应用程序,它可以显示几个RSS提要,我想只显示标题和日期的RSS提要,然后让用户点击它们来查看完整的故事。目前,我正在将RSS行值作为其行文本视图中的意图附加项传递。然而,我不能没有故事文本视图,但仍然可以将这些数据作为额外的意图传递。以下是我代码的相关部分: public class RSSFeedView extends ListActivity implements OnItemClickListener { Intent intent; private S
public class RSSFeedView extends ListActivity implements OnItemClickListener
{
Intent intent;
private String thread;
private RSSFeed feed = null;
RSSHandler rh = new RSSHandler();
private MyRowAdapter myRowAdapter;
private ArrayList<RSSItem> items;
private final static String TAG = "MAD Assignment";
public String description;
private ProgressDialog pbarDialog;
/** Called when the activity is first created */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
intent = getIntent();
thread = intent.getStringExtra("thread");
StrictMode.setThreadPolicy(
new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork()
// or .detectAll() for all detectable
.penaltyLog().build());
items = new ArrayList<RSSItem>();
myRowAdapter = new MyRowAdapter(this);
setListAdapter(myRowAdapter);
new DownloadFilesTask().execute(thread);
}
class MyRowAdapter extends ArrayAdapter<RSSItem>
{
Activity context;
MyRowAdapter (Activity context)
{
super(context, R.layout.rss, items);
this.context=context;
}
public View getView(final int position, View convertView, ViewGroup parent)
{
View row = convertView;
if(row == null)
{
LayoutInflater inflater = context.getLayoutInflater();
row = inflater.inflate(R.layout.rss, null);
}
RSSItem _item = items.get(position);
TextView title = (TextView)row.findViewById(R.id.rssTitle);
title.setText(_item.getTitle());
**TextView feed = (TextView)row.findViewById(R.id.itemlist);
feed.setText(_item.getDescription());**
//description = _item.getDescription(); TRY TO GET IT WORKING WITH JUST DATE AND TITLE!!!!!!!!
TextView date = (TextView)row.findViewById(R.id.rssDate);
String dateStr = ConvertToDate(_item.getPubDate());
date.setText(dateStr);
row.setOnClickListener(new OnItemClickListener(position));
return (row);
}
}
@Override
public boolean onCreateOptionsMenu (Menu menu)
{
new MenuInflater(getApplication()).inflate(R.menu.rss_menu, menu);
return (super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected (MenuItem item)
{
switch (item.getItemId())
{
case R.id.rss1:
new DownloadFilesTask().execute(thread);
break;
}
return super.onOptionsItemSelected(item);
}
private class DownloadFilesTask extends AsyncTask<String, Integer, RSSFeed>
{
@Override
protected RSSFeed doInBackground(String... urls)
{
// TODO Auto-generated method stub
feed = new RSSFeed();
try
{
feed = getFeed (urls[0]);
}
catch (Exception e)
{
feed = null;
}
return feed;
}
@Override
protected void onCancelled()
{
// TODO Auto-generated method stub
super.onCancelled();
}
@Override
protected void onPostExecute(RSSFeed _feed)
{
// TODO Auto-generated method stub
super.onPostExecute(_feed);
if (_feed!=null)
{
hideProgressBar();
Log.v(TAG,"onPostExecute");
for (RSSItem _item : _feed.getAllItems())
{
// needed as items have to be explicitly added
// for notifyDataSetChanged to work
items.add(_item);
}
myRowAdapter.notifyDataSetChanged();
}
else
{
showError();
}
}
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
showProgressBar();
}
@Override
protected void onProgressUpdate(Integer... values)
{
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
private RSSFeed getFeed (String urlToRssFeed)
{
try
{
URL url = new URL(urlToRssFeed);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RSSHandler theRssHandler = new RSSHandler();
xmlreader.setContentHandler(theRssHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRssHandler.getFeed();
}
catch (Exception e)
{
return null;
}
}
private class OnItemClickListener implements OnClickListener
{
private int mPosition;
OnItemClickListener(int position)
{
mPosition = position;
}
@Override
public void onClick(View row)
{
// TODO Auto-generated method stub
final String title = (String) ((TextView) row.findViewById(R.id.rssTitle)).getText();
final String date = (String) ((TextView) row.findViewById(R.id.rssDate)).getText();
**final String desc = (String) ((TextView) row.findViewById(R.id.itemlist)).getText();**
//final String desc = description;
Intent showDetailedIntent = new Intent(RSSFeedView.this, RSSDetailed.class);
showDetailedIntent.putExtra("title", title);
showDetailedIntent.putExtra("date", date);
showDetailedIntent.putExtra("desc", desc);
startActivity(showDetailedIntent);
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
// TODO Auto-generated method stub
}
}
public类RSSFeedView扩展了ListActivity实现的ListListener
{
意图;
私有字符串线程;
专用RSSFeed feed=null;
RSSHandler rh=新的RSSHandler();
私有MyRowAdapter MyRowAdapter;
私有ArrayList项;
私有最终静态字符串TAG=“MAD赋值”;
公共字符串描述;
私有进程日志;
/**首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
intent=getIntent();
线程=intent.getStringExtra(“线程”);
StrictMode.setThreadPolicy(
新StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork()
//或.detectTall()用于所有可检测的
.penaltyLog().build());
items=newarraylist();
myRowAdapter=新的myRowAdapter(此);
setListAdapter(myRowAdapter);
新的下载文件任务().execute(线程);
}
类MyRowAdapter扩展了ArrayAdapter
{
活动语境;
MyRowAdapter(活动上下文)
{
super(context,R.layout.rss,items);
this.context=context;
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
if(行==null)
{
LayoutInflater充气器=上下文。getLayoutInflater();
row=充气机。充气(R.layout.rss,空);
}
RSSItem\u item=items.get(位置);
TextView title=(TextView)row.findViewById(R.id.rstitle);
title.setText(_item.getTitle());
**TextView提要=(TextView)row.findViewById(R.id.itemlist);
feed.setText(_item.getDescription())**
//description=_item.getDescription();尝试使用日期和标题!!!!!!!!
TextView日期=(TextView)row.findViewById(R.id.rssDate);
字符串dateStr=ConvertToDate(_item.getPubDate());
date.setText(dateStr);
row.setOnClickListener(新的McClickListener(位置));
返回(行);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单)
{
新菜单充气器(getApplication())。充气(R.menu.rss_menu,menu);
返回(super.oncreateoptions菜单(menu));
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项)
{
开关(item.getItemId())
{
案例R.id.rss1:
新的下载文件任务().execute(线程);
打破
}
返回super.onOptionsItemSelected(项目);
}
私有类DownloadFilesTask扩展了AsyncTask
{
@凌驾
受保护的RSSFeed doInBackground(字符串…URL)
{
//TODO自动生成的方法存根
feed=新的RSSFeed();
尝试
{
feed=getFeed(URL[0]);
}
捕获(例外e)
{
feed=null;
}
回馈;
}
@凌驾
受保护的void onCancelled()
{
//TODO自动生成的方法存根
super.onCancelled();
}
@凌驾
PostExecute上受保护的void(RSSFeed\u feed)
{
//TODO自动生成的方法存根
super.onPostExecute(_提要);
如果(_feed!=null)
{
hideProgressBar();
Log.v(标记“onPostExecute”);
对于(RSSItem\u项:\u feed.getAllItems())
{
//必须明确添加必需的as项
//对于NotifyDataSetChange,请更改为工作
项目。添加(_项目);
}
myRowAdapter.notifyDataSetChanged();
}
其他的
{
淋浴器();
}
}
@凌驾
受保护的void onPreExecute()
{
//TODO自动生成的方法存根
super.onPreExecute();
showProgressBar();
}
@凌驾
受保护的void onProgressUpdate(整型…值)
{
//TODO自动生成的方法存根
super.onProgressUpdate(值);
}
}
私有RSSFeed getFeed(字符串urlToRssFeed)
{
尝试
{
URL=新URL(urlToRssFeed);
SAXParserFactory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
XMLReader=parser.getXMLReader();
RSSHandler-theRssHandler=新的RSSHandler();
setContentHandler(ThersHandler);
InputSource is=新的InputSource(url.openStream());
parse(is);
返回theRssHandler.getFeed();
}
捕获(例外e)
{
返回null;
}
}
私有类OnItemClickListener实现OnClickListener
{
私人投资;
OnItemClickListener(内部位置)
{
位置=位置;
}
@凌驾
公共void onClick(查看行)
{
//TODO自动生成的方法存根
最终字符串标题=(字符串)((TextView)row.findViewById(R.id.rstitle)).getText();
最终字符串日期=(字符串)((TextView)row.findViewById(R.id.rssDate)).getText();
**最终字符串desc=(字符串)((TextView)row.findViewById(R.id.itemlist)).getText()**
//最终字符串desc=描述;
Intent showDetailedIntent=新意图(RSSFeedView.this、RSSDetailed.class);
显示详细内容putExtra(“标题”,标题);
显示详细内容putExtra(“日期”,日期);
显示详细内容putExtra(“描述”,描述);
StartTactivity(显示详细内容);
}
}
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3)
{
//TODO自动生成的方法存根
}
}
public View getView(final int position, View convertView, ViewGroup parent)
{
row.setOnClickListener(new OnItemClickListener(position, _item));
}
private class OnItemClickListener implements OnClickListener
{
private int mPosition;
private RSSItem mItem;
OnItemClickListener(int position, RSSItem item)
{
mPosition = position;
mItem = item;
}
@Override
public void onClick(View row)
{
final String title = mItem.getTitle();
final String desc = mItem.getDescription();
// etc..
}
}