在我的FragmentActivity中,我创建了一个MenuItem,当用户单击它时,必须在actionBar中执行顺时针动画,并在AsyncTask完成时停止。这是我开始和停止刷新时使用的代码:
public void completeRefresh(MenuItem menuItem) {
if(menuItem!=null){
if(menuItem.getActionView()!=null){
menuItem.getActionView().clearAnimation();
menuItem.setActionView(null);
}
}
}
public void refresh(MenuItem menuItem) {
/* Attach a rotating ImageView to the refresh item as an ActionView */
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageView iv = (ImageView) inflater.inflate(R.layout.refresh_action_view, null);
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.clockwise_refresh);
rotation.setRepeatCount(Animation.INFINITE);
iv.startAnimation(rotation);
menuItem.setActionView(iv);
}
这很好用,但是当我切换片段时我遇到了问题。 Activity包含一个包含两个片段的ViewPager。当我在动画的ActionView正在进行时切换片段时,在新片段中我看到两个顺时针的MenuItems,一个动画另一个。动画永远不会完成。 这是问题的屏幕截图。我怎么能避免这种情况?
答案 0 :(得分:2)
问题是你有两个独立的Fragments
做的东西和一个常见的ActionBar
来显示一个州。
在您的情况下,最好不要在片段本身内管理ActionBar
的状态,而是从FragmentActivity
管理FragmentActivity
的状态。 ViewPager
托管您的ViewPager
(和片段)。根据{{1}}及其片段的状态,使用回调通知FragmentActivity
更改ActionBar
的状态。
例如(PSEUDO):
onViewPagerPageChanged(..){
refreshActionBar();
}
onButtonClickedInFragment1(..){
... //do again something with the ActionBar but don't let the Fragment be the owner
}
添加/删除/编辑项目
后,不要忘记使ActionBar无效 getActionBar().invalidateOptionsMenu();
答案 1 :(得分:-1)
解决了从我的片段中删除setHasOptionMenu(true)的问题。