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