Android:在Fragment切换后恢复MenuItem ActionView

时间:2013-03-21 22:42:19

标签: android android-animation menuitem

在我的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,一个动画另一个。动画永远不会完成。 这是问题的屏幕截图。我怎么能避免这种情况? When I switch Fragment

2 个答案:

答案 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)的问题。