所以我有一个的Android活动有三个标签片段,每一个列表视图,其中两个房子什么基本上是一个RSS料填充的异步打电话给。重新启用菜单项中的异步回调
有一个菜单按钮,编号为action_refresh
,它调用每个片段的个人refresh()
方法。这些方法清除填充列表对象的List
,并notifyDataSetChanged()
定制适配器,然后他们叫异步方法GetVideoFeed()
:
private void refresh() {
if (episodes.size() > 1){
episodes.clear();
episodeAdapter.notifyDataSetChanged();
}
new GetVideoFeed().execute("http://www.example.org/podcast-video.xml");
}
类似的方法被用于其它片段。
的action_refresh
按钮调用此:
if (id == R.id.action_refresh) {
// Disable the action
item.setEnabled(false);
// Call refresh on the fragments
getSupportFragmentManager().getFragments();
for(Fragment x :getSupportFragmentManager().getFragments()){
if (x instanceof PodcastFragment) {
((PodcastFragment) x).refresh();
}
if (x instanceof StoryFragment) {
((StoryFragment) x).refresh();
}
if (x instanceof DownloadFragment) {
((DownloadFragment) x).refresh();
}
}
// Somehow enable this after async call...
item.setEnabled(true);
return true;
}
我的问题在于,用户可能点击异步方法完成,所以ListView
被填充多次刷新前多次。我想重新启用菜单item
在回调,但异步线程不会修改主线程,我不知道如何访问onOptionsItemSelected
方法之外的菜单项,虽然我怀疑那里在于解决方案。
所以我的问题是,在坚果壳,我怎么重新启用从一个异步一个MenuItem
回调,我应该做的,如果有2个的回调(什么使这个重新启用绝当最后的回调完成时完成)?
感谢您的指点,但是您通过onSuccess回调是什么意思?我使用onPostExecute回调,我应该在父活动中听这个吗?这将是什么样的听众? onPostExecuteListener? – Nevermore
回调是在异步操作完成时调用的方法。我不确定GetVideoFeed类里面有什么,也许你可以编辑代码并将其添加到原始文章中。既然你提到onPostExecute方法,我假设你正在使用一个AsyncTask对象。在该方法(onPostExecute)上,您应该通知您的活动已完成该任务(通过使用片段中定义的接口侦听器,请参阅https://developer.android.com/training/basics/fragments/communicating.html) 。当所有片段都通知活动时,您可以调用invalidateOptionsMenu。 – fernandospr