java - 如果您在动画进行时单击,Android fragment 事务动画会崩溃

标签 java android android-fragments fragment

我是 fragment 动画的新手,现在我遇到了一个问题。我尝试将动画添加到 fragment 事务中。他们正在工作,但是,当我尝试在交易仍在进行时单击按钮时,应用程序崩溃了。我该如何避免这种情况?这是我的代码:

FragmentManager fragmentManager =getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.enter_from_left, R.anim.exit_to_right);
fragmentTransaction.replace(R.id.container_body, fragmentMain);
fragmentTransaction.commit();

错误:

10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime: FATAL EXCEPTION: main
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime: Process: com.mts.wifisharetest, PID: 14140
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime: java.lang.IllegalStateException: No host
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1194)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1189)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2001)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1976)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:808)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:103)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:193)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5292)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
10-09 14:35:23.212 14140-14140/com.mts.wifisharetest E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

最佳答案

试试这个代码:

FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
mFragmentTransaction.setCustomAnimations(R.animator.enter_anim, R.animator.exit_anim);
mFragmentTransaction.replace(R.id.listFragment, new YourFragment());
mFragmentTransaction.commit();

fragment 开始动画:

<?xml version="1.0" encoding="utf-8"?>
    <set>
    <objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:propertyName="x"
    android:valueFrom="2000"
    android:valueTo="0"
    android:valueType="floatType" />
    </set>

fragment 结束动画

<?xml version="1.0" encoding="utf-8"?>
    <set>
    <objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:propertyName="x"
    android:valueFrom="0"
    android:valueTo="-2000"
    android:valueType="floatType" />
    </set>

希望对您使用透明 fragment 动画有所帮助。

关于java - 如果您在动画进行时单击,Android fragment 事务动画会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33037173/

相关文章:

java - 为什么我的部分输出在打印时没有显示出来?

android - GregorianCalendar 或只是日历

android - 将 Android 服务的启动状态从 START_STICKY 更改为 START_NON_STICKY

android - ListView 项目中的 YouTubePlayerSupportFragment 为空

java - 如何证明一个类不是线程安全的

java - 使用 Java Scanner 读取长类型 - 字符限制?

python - Kivy buildozer 在为 Android 打包时使用错误版本的 Kivy 和 KivyMD

android - 何时在 View 上使用 fragment ?

android - 如何从 Fragment 到 ViewModel 进行通信?

java - 如何解析属性文件中的属性值