的AsyncTask操作我新的Android开发方面,作为我学习的一部分,我想提出一个多语种的新闻阅读器应用程序,该应用程序的获取RSS从谷歌新闻和解析饲料。返回类型为
对于这一点,我使用标签视图显示多国语言,用户可以通过不同的语言刷卡。应用程序包含印地文,马拉雅拉姆语,英语和泰米尔语标签,所有列出特定的新闻项目。
每种语言视图页是独立的片段。并且应用程序中共有四个片段,主要活动包含所有这些。
所有这些片段我有一个AsyncTask扩展类,它加载和解析来自server.and的新闻,并在其doInBackground方法返回一个数组列表,但这个问题是当我从一个标签滑动到另一个标签非常慢。我正在粘贴我的代码。我认为我的AsyncTask用法不正确,因为我在onPreExecute方法中显示了一个进度条,但它也没有正确显示。
请人在看我的代码,并帮助我纠正
EnglishNewsFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ArrayList<HashMap<String, String>> newsWrapper;
context = getActivity();
View rootView = inflater.inflate(R.layout.english_news_fragment, container, false);
NewsLoader newsLoader = new NewsLoader(context, language);
newsLoader.execute();
try {
newsWrapper = newsLoader.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
showNews(newsWrapper);
}
return rootView;
}
NewsLoader
public class NewsLoader extends AsyncTask{
public NewsLoader(Context context, String language) {
this.context = context;
this.language = language;
}
@Override
protected void onPreExecute() {
startDialogue();
initAll(language);
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
getNews();
news = processXML();
} catch (Exception e) {
e.printStackTrace();
}
return news;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> aVoid) {
super.onPostExecute(aVoid);
stopDialogue();
}
}
UPDATE
AsyncTask.get()阻止用户界面。所以我必须实现一个回调接口,任何人都可以帮助我做到这一点我已经从here读了一点,但它将如何调用,以及如何将结果传递给MainActivity?
屏幕截图
顺便说一句:调用'super.onPostExecute()'和'super.onPreExecute()'是没用的,因为在超类中没有默认实现 –
为什么你没有使用onProgressUpdate来更新你的进度条? –
bcs我没有更新进度,只显示一个微调,它已经足够了 – droidev