【问题标题】:Correct approach for async ListFragment异步 ListFragment 的正确方法
【发布时间】:2013-02-21 10:14:12
【问题描述】:

我对 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 示例等。

提前非常感谢! 罗宾

【问题讨论】:

    标签: android android-asynctask android-fragments xamarin.android android-loader


    【解决方案1】:

    我不确定这将如何与 monodroid 一起使用,但我猜它应该大致相同。使用 AsyncTaskLoader,因为它们通过 LoaderManager 与活动生命周期相关联。您应该让您的片段实现 LoaderCallbacks 接口并在其中某处调用loaderManager.init(...)(例如,在onActivityCreated 中)。加载器任务完成后,您将在onLoadFinished 中收到数据通知,您可以在那里将其加载到适配器中并进行进度条和列表视图转换。您可以在文档页面here 或更详细的here 上找到有关如何实现 AsyncTaskLoader 的示例。至于过渡,请使用 this 之类的东西,它可以为您的应用程序提供一些润色。

    【讨论】:

      猜你喜欢
      • 2016-09-29
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多