Android 异步ListFragment的正确方法
我对Android非常陌生,我发现很难找到正确/最佳的方法来完成以下任务: 我使用ActionBarSherlock拥有一组选项卡,每个选项卡都加载一个片段。其中之一是ListFragment(实际上是SherlockListFragment)。我一开始只是使用一个新线程来加载列表,一切似乎都很好,直到在加载列表之前切换到另一个选项卡。然后它在setListShowed(true)处失败,因为我猜片段没有激活Android 异步ListFragment的正确方法,android,android-asynctask,android-fragments,xamarin.android,android-loader,Android,Android Asynctask,Android Fragments,Xamarin.android,Android Loader,我对Android非常陌生,我发现很难找到正确/最佳的方法来完成以下任务: 我使用ActionBarSherlock拥有一组选项卡,每个选项卡都加载一个片段。其中之一是ListFragment(实际上是SherlockListFragment)。我一开始只是使用一个新线程来加载列表,一切似乎都很好,直到在加载列表之前切换到另一个选项卡。然后它在setListShowed(true)处失败,因为我猜片段没有激活 public override void OnActivityCreated(Bund
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示例等
非常感谢!
罗宾我不确定这对单机器人会起什么作用,但我猜应该差不多。使用AsyncTaskLoader,因为它们通过LoaderManager绑定到活动生命周期。您应该让您的片段实现LoaderCallbacks接口,并在其中的某个地方调用
loaderManager.init(…)
(例如,在onActivityCreated
中)。加载程序任务完成后,您将在onLoadFinished
中收到数据通知,您可以在那里将数据加载到适配器中,并执行progressbar和listview转换。您可以在文档页面上找到关于如何实现AsyncTaskLoader的示例,或者更详细一些。至于过渡,请使用类似这样的工具,使您的应用程序更加完善