在片段android

时间:2015-08-31 13:52:09

标签: android-fragments android-animation

我的应用程序以Main Activity开头,按下“next button”后创建了一个新片段。

我的问题是按下“下一步”按钮后,新片段从顶部动画。

我想禁用此动画,但我发现网络上没有任何效果。

这是我找到的主要结果,但对我没什么用处:

Link 1

Link 2

这是我的代码的一部分: ... //内部按钮单击侦听器

        case R.id.btnNext:

        if(Maindb.getSingleSetting("isFisrtTime").equals("true"))
        {

             String  str = Maindb.getSingleSetting("isFisrtTime");
            fragmentLanguage = new ActChooseLanguage();
            if (fragmentLanguage != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.frame_container, fragmentLanguage).commit();
            }
        }
        else
        {
            fragmentHome = new ActHome();
            if (fragmentHome != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.frame_container, fragmentHome).commit();
            }
        }
        break;

这是片段的主要部分:

public class ActChooseLanguage  extends Fragment{
    private  View rootView ;
    DrawerLayout mDrawerLayout;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        getActivity().overridePendingTransition(0, 0);

        rootView = inflater.inflate(R.layout.activity_choose_language, container, false);


        ImageButton btnACMenu = (ImageButton) getActivity().getActionBar().getCustomView().findViewById(R.id.imgHamburger);
        btnACMenu.setVisibility(View.INVISIBLE);

        getActivity().getIntent().addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        getActivity().getActionBar().show();


        return rootView;
    }

    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        }
.
.
.
}

如果有其他解决方案,请告诉我。 感谢

更新

问题发生的原因是ActionBar而不是Fragment,解决方案如下:

1 个答案:

答案 0 :(得分:0)

好的,我找到了这个问题的答案:

我发现它HERE

解决方案是:

public static void disableShowHideAnimation(ActionBar actionBar) {
    try
    {
        actionBar.getClass().getDeclaredMethod("setShowHideAnimationEnabled", boolean.class).invoke(actionBar, false);
    }
    catch (Exception exception)
    {
        try {
            Field mActionBarField = actionBar.getClass().getSuperclass().getDeclaredField("mActionBar");
            mActionBarField.setAccessible(true);
            Object icsActionBar = mActionBarField.get(actionBar);
            Field mShowHideAnimationEnabledField = icsActionBar.getClass().getDeclaredField("mShowHideAnimationEnabled");
            mShowHideAnimationEnabledField.setAccessible(true);
            mShowHideAnimationEnabledField.set(icsActionBar,false);
            Field mCurrentShowAnimField = icsActionBar.getClass().getDeclaredField("mCurrentShowAnim");
            mCurrentShowAnimField.setAccessible(true);
            mCurrentShowAnimField.set(icsActionBar,null);
        }catch (Exception e){
            //....
        }
    }
}

我不知道动画来自动作栏,因此在调用此功能后动画被禁用。