关于分片交易

Regarding fragment transactions

我将三个片段合二为一 activity 并在 activity 中处理了背压。在 上按 在一个片段中加载 (CallingFragment) DialerFragment,因为我在加载 CallingFragement 时将其添加到后台堆栈并提供 logs。请告诉我为什么会这样?

正在加载调用片段:

 void launchCallingFrag(String number, String name ,long time , boolean isongoing,String price )
    {
        String calleename= name;
        if(calleename==null)
        calleename=CommonUtility.getContactDisplayNameByNumber(number, context);

        callingScreenFragment.setNumber( number,calleename ,time,isongoing , price);
        ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.dial_fragment, callingScreenFragment, CALLING_FRAGMENT_TAG);

        dialerFragment = (DialerFragment)getSupportFragmentManager().findFragmentByTag(DIALER_FRAGMENT_TAG);

        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

            ft.addToBackStack(DIALER_FRAGMENT_TAG);


        ft.commit();
        overridePendingTransition(R.anim.animation1, R.anim.animation2);

    }

后压:

  @Override
public void onBackPressed() {
Log.e("back press called ",""+getSupportFragmentManager().getBackStackEntryCount());
dialerFragment = (DialerFragment)getSupportFragmentManager().findFragmentByTag(DIALER_FRAGMENT_TAG);
if (dialerFragment!=null&&dialerFragment.isVisible()) {
// add your code here
Log.e("dialer fragment","dialer fragment ");
dialerFragment.onBackPress();
}
else {

callingScreenFragment = (CallingScreenFragment) getSupportFragmentManager().findFragmentByTag(CALLING_FRAGMENT_TAG);
if (callingScreenFragment!=null&&callingScreenFragment.isVisible()) {

Log.e("calling  fragment", "calling fragment ");

callingScreenFragment.onBackPress(fromNotification);

}
else {
recentDetailFragment = (RecentDetailFragment) getSupportFragmentManager().findFragmentByTag(LOG_DETAILS_FRAGMENT_TAG);
if (recentDetailFragment!=null&&recentDetailFragment.isVisible()) {
Log.e("recent   fragment","recent fragment ");
recentDetailFragment.onBackPress();
}
else {
super.onBackPressed();
}
}

}

日志:

 02-05 17:17:04.967  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.addTargets
    02-05 17:17:04.967  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.967  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.addTransitionTargets
    02-05 17:17:04.967  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.967  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.beginDelayedTransition
    02-05 17:17:04.967  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.967  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.captureExitingViews
    02-05 17:17:04.967  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.967  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve virtual method 12194: Landroid/view/ViewGroup;.isTransitionGroup ()Z
    02-05 17:17:04.967  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.cleanupTransitions
    02-05 17:17:04.967  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.967  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.cloneTransition
    02-05 17:17:04.967  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.977  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.excludeTarget
    02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve virtual method 12022: Landroid/view/View;.getTransitionName ()Ljava/lang/String;
    02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve virtual method 12022: Landroid/view/View;.getTransitionName ()Ljava/lang/String;
    02-05 17:17:04.977  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.mergeTransitions
    02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.977  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.removeTargets
    02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.977  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.transition.Transition', referenced from method android.support.v4.app.FragmentTransitionCompat21.setEpicenter
    02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve check-cast 1450 (Landroid/transition/Transition;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to find class referenced in signature (Landroid/transition/Transition;)
            02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ Unable to resolve superclass of Landroid/support/v4/app/FragmentTransitionCompat21; (1449)
            02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ Link of class 'Landroid/support/v4/app/FragmentTransitionCompat21;' failed
    02-05 17:17:04.977  10280-10280/com.myapp E/dalvikvm﹕ Could not find class 'android.support.v4.app.FragmentTransitionCompat21', referenced from method android.support.v4.app.FragmentTransitionCompat21.setSharedElementEpicenter
    02-05 17:17:04.977  10280-10280/com.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 422 (Landroid/support/v4/app/FragmentTransitionCompat21;) in Landroid/support/v4/app/FragmentTransitionCompat21;
    02-05 17:17:04.987  10280-10280/com.myapp W/dalvikvm﹕ Unable to resolve superclass of Landroid/support/v4/app/FragmentTransitionCompat21; (1449)
            02-05 17:17:04.987  10280-10280/com.myapp W/dalvikvm﹕ Link of class 'Landroid/support/v4/app/FragmentTransitionCompat21;' failed
    02-05 17:17:04.987  10280-10280/com.myapp W/dalvikvm﹕ Unable to resolve superclass of Landroid/support/v4/app/FragmentTransitionCompat21; (1449)
            02-05 17:17:04.987  10280-10280/com.myapp W/dalvikvm﹕ Link of class 'Landroid/support/v4/app/FragmentTransitionCompat21;' failed

不幸的是,这是由于 android.support.v4 库中的错误尚未解决(截至本回答之日)。

本质上,支持库使用 API 级别 19 和 21 APIs,即使 运行 在 API 级别不够高的设备上也是如此。这是一个非常严重(甚至令人震惊)的错误,因为 Android 支持库的全部目的是使应用程序免受 API 级别差异的影响!

在你的情况下,你显然 运行 在 API 级别低于 19 的设备上,这是引入整个 android.transition 包的时间。

相关的 Android 问题是:77670 and 89244。您可能想访问这些问题并给它们加注星标,and/or 添加一个新问题。