Android – 从Fragments动画ActionBar图标的问题

前端之家收集整理的这篇文章主要介绍了Android – 从Fragments动画ActionBar图标的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在应用程序的ActionBar中持续动画化“刷新”图标时遇到一些问题.

我有一个容器FragmentActivity,当用户通过应用程序导航(从片段本身或SlidingMenu选项)导入和切出片段时.所以当应用程序首次加载时,我的FragmentContainer会添加FragA.从FragA,用户可以导航到FragB,然后交换.

在动作栏中,我显示一个静态的“刷新”图标.随着每个片段的加载,我用一个动画“旋转”图标替换.加载完成后,我恢复到原来的刷新图标.

问题是,这个动画只适用于原始片段(FragA,在这种情况下).当用户导航到FragB并选择刷新图标时,触发刷新,但动画永远不会发生.类似地,如果按下返回按钮返回到FragA,则现在遵循相同的模式,即当按下时刷新按钮不动画.

注意事项…

>我在https://github.com/jfeinstein10/SlidingMenu使用ActionBarSherlock和SlidingMenu实现.所以上面的活动实际上是一个SlidingFragmentActivity.
>两个片段都调用setHasOptionsMenu(true) – 我已经通过调试完成了,并且每个都正确地调用了onCreateOptionsMenu.
>这两个片段的图标正确显示 – 当我导航“默认”片段时,动画就不会发生.
>当使用SlidingMenu导航时,我看到相同的行为 – FragA加载,动画作品 – > SlidingMenu用于导航到不同的片段…动画无效 – >返回按钮到FragA …动画也不在这里.
>我使用的是FragmentTransaction.remove()和add()而不是replace(),因为我之前已经使用了replace()的后退按钮问题 – 我正在使用兼容性lib,我在这里阅读,替换实现是有点错误 – 而不是使用它肯定解决了我看到的问题.

下面的代码片段:

我加载原始片段的代码是….

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame,new FragA());
ft.addToBackStack(null);
ft.commit();

为FragA“交换”FragB ….

public void switchContent(PysoBaseFragment fragment) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.remove(existingFragment);
    ft.add(R.id.content_frame,fragment);
    ft.addToBackStack(null);
    ft.commit();
}

方法在容器活动中声明,并从FragA调用即….

getFragmentContainer().switchContent(new FragB());

新的片段在开始加载时调用图标的代码调用.它的东西像…

ImageView spinnerActionView = (ImageView) inflater.inflate(R.layout.refresh_action_view,null);
    Animation rotation = AnimationUtils.loadAnimation(this,R.anim.rotate_animation);
    rotation.setRepeatCount(Animation.INFINITE);
    spinnerActionView.startAnimation(rotation);
    menuItemRefresh = menu.findItem(R.id.menu_refresh);
    menuItemRefresh.setActionView(spinnerActionView);

调用onCreateOptionsMenu时,将菜单分配给容器的实例变量.

更新:

我注意到这个方面还有一个奇怪的错误(我很乐意将此作为一个单独的问题添加,但是我在这里更新,希望能够揭示我原来的问题 – 我相信都是由我如何从我的片段配置我的动作栏).

当我第一次加载片段时,我显示1个静态刷新图标.如果我旋转屏幕…另一个刷新图标出现…当我旋转屏幕回来,第三个刷新图标出现!

陌生人仍然,点击后退按钮,依次删除每个附加图标,最后(在第四次点击)返回到上一个屏幕.

解决方法

不要将菜单项更改为除外的菜单
onPrepareOtionsMenu(){
}

你应该这样.

在你的活动中:

boolean mIsRefreshing =false;

public boolean onPrepareOptionsMenu(Menu menu) {
if(mIsRefreshing){
        final MenuItem menuItemRefresh = menu.findItem(R.id.menu_refresh);
    menuItemRefresh.setActionView(spinnerActionView);
}
        return true;
    }

public void setRefreshing(boolean refreshing){
mIsRefreshing = refreshing;
invalidateOptionsMenu();  //supportInvelidateOptionsMenu()
}

所以现在你可以从你的荣耀中呼唤

((YourActivity)getActivity()).setRefreshing(true);
((YourActivity)getActivity()).setRefreshing(false);
原文链接:https://www.f2er.com/android/312596.html

猜你在找的Android相关文章