Java 回退线程中刷新多个制表符的正确方法

Java 回退线程中刷新多个制表符的正确方法,java,android,android-fragments,android-asynctask,Java,Android,Android Fragments,Android Asynctask,我已经用片段实现了动态选项卡导航。片段存储在堆栈上,当用户更改选项卡时,新片段应替换现有内容以显示新项。 但首先,数据必须刷新,因为他们将从RESTWebService下载数据,这需要一些时间,所以还有BusyFragment,表示数据加载过程 我使用AsyncTask实现了后台刷新数据,并使用单独的AsyncTask对象来刷新特定选项卡,方法如下: private void RefreshShopsMainMenuFragment(Fragment f) { if

我已经用片段实现了动态选项卡导航。片段存储在堆栈上,当用户更改选项卡时,新片段应替换现有内容以显示新项。 但首先,数据必须刷新,因为他们将从RESTWebService下载数据,这需要一些时间,所以还有BusyFragment,表示数据加载过程

我使用AsyncTask实现了后台刷新数据,并使用单独的AsyncTask对象来刷新特定选项卡,方法如下:

private void RefreshShopsMainMenuFragment(Fragment f)
    {


        if (refreshAsyncTaskShops != null && refreshAsyncTaskShops.getStatus() != AsyncTask.Status.FINISHED)
            return;

        final ListFragment fragmentToRefresh = (ListFragment) f;


        refreshAsyncTaskShops = new AsyncTask<Void, Void, ArrayList<ListDataDef>>()
        {

            @Override
            protected void onPreExecute()
            {
                ShowBusyFragment(true, Global.TAB_SHOPS); //for other tabs, other tab identifiers from Global
            }

            @Override
            protected ArrayList<ListDataDef> doInBackground(Void... voids)
            {
                return ShopsTabDataProvider.GetNewData(); //For other tabs, different data provider call
            }

            @Override
            protected void onPostExecute(ArrayList<ListDataDef> result)
            {
                fragmentToRefresh.mainData = result;
                fragmentToRefresh.DisplayNewData();

                ShowBusyFragment(false, Global.TAB_SHOPS); //for other tabs, different tab indentifier
            }
        };

        refreshAsyncTaskShops.execute();

    }
所以,基本上如上图所示:要刷新shops选项卡,将调用refreshAsyncTaskShops,还有其他异步任务对象,我在它们不同的地方标记了行

有没有更优雅的解决方案,不用声明多个AsyncTask对象?我对当前的实现并不完全满意,因为我的所有异步任务对象基本上是相同的


另外,正如您所看到的,没有任何队列,因此不需要等待第一个选项卡刷新和另一个选项卡刷新。但是,多次同时刷新同一个选项卡是绝对不可能的,因此我添加了if条件,以防止在上一个任务尚未完成时执行相同的任务。

是否使用视图寻呼机和浮动选项卡?TabHost和ontabchangelister