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 正在进行时切换片段时,在新的片段中,我看到两个顺时针菜单项,一个在另一个动画上。而且动画永远不会结束。这是问题的截图。我怎样才能避免这种情况?当我切换片段时

4

2 回答 2

2

问题是你有两个独立的做事Fragments和一个共同的显示状态。ActionBar

在您的情况下,最好不要ActionBar从 Fragments 本身管理状态,而是从FragmentActivity. FragmentActivity托管您的(ViewPager和片段)。根据ViewPager及其 Fragments 的状态,使用回调来通知FragmentActivity更改 的状态ActionBar

例如(伪):

   onViewPagerPageChanged(..){
       refreshActionBar();
   }

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

并且不要忘记在添加/删除/编辑项目后使 ActionBar 无效

   getActionBar().invalidateOptionsMenu();
于 2014-05-01T09:13:58.800 回答
-2

只需从我的片段中删除 setHasOptionMenu(true) 即可解决。

于 2013-03-22T01:18:07.790 回答