2017-03-28 3 views
0

私のコードはのfragmentEmptyが復帰したときの私のコードです。サポートSDKでは25.1.0以前からすべて正常に動作します。SDK 25.1.1 NPE:ヌルオブジェクト参照で仮想メソッド 'int android.view.View.getVisibility()'を呼び出そうとしました

class FragmentEmpty : Fragment() { 

    var fragmentTwo : Fragment? = null 
    var fragmentOne : Fragment? = null 

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { 
     return inflater.inflate(R.layout.fragment_empty, container, false) 
    } 


    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { 
     super.onViewCreated(view, savedInstanceState) 

     if (childFragmentManager.findFragmentByTag("FragmentOne") == null) { 
      fragmentOne = FragmentOne() 
      childFragmentManager.beginTransaction().add(R.id.container, fragmentOne, "FragmentOne").commit() 
     } else { 
      fragmentOne = childFragmentManager.findFragmentByTag("FragmentOne") 
     } 

     if (childFragmentManager.findFragmentByTag("FragmentTwo") != null) { 
      fragmentTwo = childFragmentManager.findFragmentByTag("FragmentTwo") 
      childFragmentManager.popBackStackImmediate() 
     } else { 
      fragmentTwo = FragmentTwo() 
     } 

     val transitionInflater = TransitionInflater.from(activity) 
     val sharedElement = transitionInflater.inflateTransition(R.transition.shared_transition) 
     fragmentTwo?.sharedElementReturnTransition = sharedElement 
     fragmentOne?.sharedElementEnterTransition = sharedElement 
    } 

    fun openFragmentTwo() { 
     var fragmentTransaction = childFragmentManager.beginTransaction() 
     fragmentTransaction = fragmentTransaction.addSharedElement(activity.findViewById(R.id.fragment_button), "my_transition") 
     fragmentTransaction.replace(R.id.container, fragmentTwo, "FragmentTwo").addToBackStack("").commit() 
    } 

} 

たとえば、25.1.1以降に移動すると、 25.2.0。そして、さえ25.3.0は、ときpopBackStackImmediate

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference 
    at android.support.v4.app.FragmentTransitionCompat21.findNamedViews(FragmentTransitionCompat21.java:387) 
    at android.support.v4.app.FragmentTransition.captureOutSharedElements(FragmentTransition.java:693) 
    at android.support.v4.app.FragmentTransition.configureSharedElementsUnoptimized(FragmentTransition.java:605) 
    at android.support.v4.app.FragmentTransition.configureTransitionsUnoptimized(FragmentTransition.java:300) 
    at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:113) 
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146) 
    at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:823) 
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:776) 
    at myproject.com.myapplication.FragmentEmpty.onViewCreated(FragmentEmpty.kt:32) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1314) 
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
    at android.support.v4.app.BackStackRecord.executePopOps(BackStackRecord.java:807) 
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2360) 
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
    at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:823) 
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:776) 
    at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:178) 

私は今、このエラーを持って、それが修正されていないが、それは https://code.google.com/p/android/issues/detail?id=234324&sort=-id&colspec=ID%20Type%20Status%20Owner%20Summary%20Sta

を修正することになる旨のこのリンクがあります。 25.1.0にとどまらず、修正を待っている間に、この問題の回避策があるのだろうか?

答えて

0

プレフラグメント25.1.0とポスト25.1.0のいくつかの研究の後で、フローを異なる原因とする主な違いは、デフォルトのAllowOptimizationをtrueからfalseに設定することです。

SDKの新しいバージョンを使用するときに25.1.0の動作を取り戻すには、fragmentTransactionにsetAllowOptimization(true)を設定します。

fun openFragmentTwo() { 
     var fragmentTransaction = childFragmentManager.beginTransaction() 
     fragmentTransaction = fragmentTransaction.setAllowOptimization(true).addSharedElement(activity.findViewById(R.id.fragment_button), "my_transition") 
     fragmentTransaction.replace(R.id.container, fragmentTwo, "FragmentTwo").addToBackStack("").commit() 
    } 

これはクラッシュを解決します。

関連する問題

 関連する問題