我到处寻找这个,但似乎没有人有答案。
我的简单问题是:
有预加载活动的方法吗?我需要这个,因为我使用了一个标签,一个标签有多个活动。我的一个活动是rss阅读器,加载非常困难(大约2-3秒)。
我在网上找到的只是一个笑话。每个人都有一个意见,但没有人能指出你的示例代码。等待回答,谢谢!
这是加载Feed的代码:
At onCreate:
// go get our feed!
feed = getFeed(RSSFEEDOFCHOICE);
// display UI
UpdateDisplay();
countdown();
And the functions:
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
return null;
}
}
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;
}
feedtitle.setText(feed.getTitle());
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);
}
答案 0 :(得分:1)
您必须在活动的OnCreate函数中使用Asyc Task http://developer.android.com/reference/android/os/AsyncTask.html。 并且记住你必须创建一个接口(这里我使用EVRequestCallback),你需要在完成rss加载后更新Activity的UI。下面是RSS feed的异步任务的示例代码。
public class RetrieveRssAsync {
public RetrieveRssAsync(Context ct,EVRequestCallback gt)
{
}
public static abstract class EVRequestCallback {
public abstract void requestDidFail(ArrayList<EventItem> ei);
public abstract void requestDidLoad(ArrayList<EventItem> ei);
}
public static class RetrieveEventFeeds extends AsyncTask<Void, Void, ArrayList<EventItem>>
{
Context mContext;
private EVRequestCallback mCallback;
public RetrieveEventFeeds(Context ct,EVRequestCallback gt)
{
mContext= ct;
mCallback=gt;
}
private ProgressDialog progress = null;
@Override
protected ArrayList<EventItem> doInBackground(Void... params) {
return retrieveRSSFeed("--URL of RSS here--",this.mContext);
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPreExecute() {
progress = ProgressDialog.show(
mContext, null, "Loading ...",true,true);
super.onPreExecute();
}
@Override
protected void onPostExecute(ArrayList<EventItem> result) {
//setListAdapter();
mCallback.requestDidLoad(result);
progress.dismiss();
//Toast.makeText(this.mContext, "current done", Toast.LENGTH_SHORT).show();
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
}
答案 1 :(得分:0)
博客“Styling Android”提供了详细示例,说明如何执行后台任务。 FYI。
链接:
Android样式&gt;后台任务 - 第1部分 - http://blog.stylingandroid.com/archives/833
造型Android - http://blog.stylingandroid.com/