Android:在Fragment切换后恢复MenuItem ActionView

3
在我的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 动画进行中切换片段时,在新片段中,我会看到两个顺时针旋转的菜单项,一个向上动画,另一个向下。并且动画永远不会完成。

以下是该问题的截图。我该如何避免这种情况? When I switch Fragment

2个回答

2
问题在于您有两个独立的“片段”正在执行某些操作,而一个公共的“ActionBar”用于显示状态。
在您的情况下,最好不要从片段本身管理“ActionBar”的状态,而是从“FragmentActivity”中管理。 “FragmentActivity”托管您的“ViewPager”(和片段)。根据“ViewPager”及其片段的状态,使用回调通知“FragmentActivity”更改“ActionBar”的状态。
例如(伪代码):
   onViewPagerPageChanged(..){
       refreshActionBar();
   }

   onButtonClickedInFragment1(..){
       ... //do again something with the ActionBar but don't let the Fragment be the owner
   }

不要忘记在添加/删除/编辑项目后使ActionBar无效。
   getActionBar().invalidateOptionsMenu();

-2

通过简单地从我的片段中删除setHasOptionMenu(true)来解决。


1
但是这些片段不能有菜单项吗? - sgarman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接