我对 Android 还是很陌生,我发现很难找出完成以下任务的正确/最佳方法:
我正在使用 ActionBarSherlock 拥有一组选项卡,每个选项卡都加载一个片段。其中之一是 ListFragment(实际上是 SherlockListFragment)。我一开始只是使用一个新线程来加载列表,一切看起来都很好,直到您在列表加载之前切换到不同的选项卡。然后它在 SetListShown(true) 失败,因为我猜该片段不活动。
public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
SetListShown(false);
var listView = (ListView) Activity.FindViewById(Android.Resource.Id.List);
Button loadMore = new Button(Activity);
loadMore.SetText("Load more articles", TextView.BufferType.Normal);
loadMore.Click += LoadMoreArticles;
listView.AddFooterView(loadMore);
ThreadPool.QueueUserWorkItem((obj) => {
var articles = _articleService.GetArticles(0, 10, DateTime.UtcNow);
_items = articles.Select(x => new ArticleSummaryModel(x)).ToList();
Activity.RunOnUiThread(() => {
_adapter = new ArticleList_Adapter(Activity, _items);
ListAdapter = _adapter;
SetListShown(true);
});
});
}
我想要发生的是,当第一次打开选项卡时,它开始加载数据,显示标准进度指示器,然后它完成了显示列表并删除了进度指示器。如果在加载数据时选项卡发生更改,则在再次打开该选项卡时应该可见。
如果有一种简单的方法可以实现我错过的这一点,那就太好了!Android 根本不可能,我也想知道,所以我可以停止尝试 ;-)
我已经阅读了很多关于 AsyncTask、AsyncTaskLoader、IntentService 等的内容,但我完全不清楚我需要使用什么,而且其中任何一个都可以真正实现我想要的!
仅供参考,我正在使用 mono for android 和支持 v2.3+ 的兼容性包,但希望可以翻译任何 java 示例等。
提前谢谢了!罗宾