Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 异步ListFragment的正确方法_Android_Android Asynctask_Android Fragments_Xamarin.android_Android Loader - Fatal编程技术网

Android 异步ListFragment的正确方法

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

我对Android非常陌生,我发现很难找到正确/最佳的方法来完成以下任务:

我使用ActionBarSherlock拥有一组选项卡,每个选项卡都加载一个片段。其中之一是ListFragment(实际上是SherlockListFragment)。我一开始只是使用一个新线程来加载列表,一切似乎都很好,直到在加载列表之前切换到另一个选项卡。然后它在setListShowed(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示例等

非常感谢!
罗宾

我不确定这对单机器人会起什么作用,但我猜应该差不多。使用AsyncTaskLoader,因为它们通过LoaderManager绑定到活动生命周期。您应该让您的片段实现LoaderCallbacks接口,并在其中的某个地方调用
loaderManager.init(…)
(例如,在
onActivityCreated
中)。加载程序任务完成后,您将在
onLoadFinished
中收到数据通知,您可以在那里将数据加载到适配器中,并执行progressbar和listview转换。您可以在文档页面上找到关于如何实现AsyncTaskLoader的示例,或者更详细一些。至于过渡,请使用类似这样的工具,使您的应用程序更加完善