簡體   English   中英

共享元素轉換中的IllegalArgumentException

[英]IllegalArgumentException in Shared Element Transition

實現了活動共享元素轉換的活動。 它工作正常,但在極少數運行> = LOLLIPOP的設備上接收崩潰。

報告:

Fatal Exception: java.lang.IllegalArgumentException
       at android.os.Parcel.readException(Parcel.java:1550)
       at android.os.Parcel.readException(Parcel.java:1499)
       at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:4654)
       at android.app.Activity.isTopOfTask(Activity.java:5557)
       at android.app.Activity.startActivityForResult(Activity.java:3903)
       at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
       at android.app.Activity.startActivity(Activity.java:4146)
       at com.mypackage.Activity1.method1(Activity1.java:414). 

試過這個:

Intent intent = new Intent(Activity1.this, Activity2.class);
     ActivityOptionsCompat options = ActivityOptionsCompat.
                    makeSceneTransitionAnimation(Activity1.this,
                            logoImageView,
                            ViewCompat.getTransitionName(logoImageView));
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                startActivity(intent, options.toBundle());
            } else {
                startActivity(intent);
            }
            overridePendingTransition(R.anim.stay, R.anim.stay); 

那么這個來自ActivityManagerProxy中的 sof IllegalArgumentException

Intent intent = new Intent(Activity1.this, Activity2.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(Activity1.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    startActivity(intent, options.toBundle());
} else {
    ActivityOptionsCompat options = ActivityOptionsCompat.
            makeSceneTransitionAnimation(SplashActivity.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    ActivityCompat.startActivity(SplashActivity.this, intent, options.toBundle());
}
overridePendingTransition(R.anim.stay, R.anim.stay);  

兩個代碼都發生崩潰:

startActivity(intent, options.toBundle());  

曾經面臨過? 任何提示?

看起來你正在使用Window.FEATURE_CONTENT_TRANSITIONS 但相反,您應該使用Window.FEATURE_ACTIVITY_TRANSITIONS

styles-v21.xml ,添加:

<item name="android:windowActivityTransitions">true</item>
<!-- optional -->
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item> 

來自Docs:

Window.FEATURE_CONTENT_TRANSITIONS

允許活動通過發送或接收使用makeSceneTransitionAnimation(Activity, Pair[])makeSceneTransitionAnimation(Activity, View, String)創建的ActivityOptions包來運行活動轉換。

Window.FEATURE_ACTIVITY_TRANSITIONS

用於請求窗口內容更改的標志應使用TransitionManager進行動畫處理。

TransitionManager使用setTransitionManager(TransitionManager) 如果未設置,則將使用默認的TransitionManager。

有關詳細信息,請參閱此帖子

根據這篇文章,你不應該在API 21上面使用ActivityOptionsCompat: https//stackoverflow.com/a/42455484/1067763

我不使用它,但我仍然有這個崩潰:

在API 27中的startActivityForResult之后崩潰

我認為它仍然以某種方式使用了錯誤的版本。

不過,知道這一點你可以解決你的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM