首页 文章

覆盖onCreateAnimation对java.lang.IllegalStateException的FATAL EXCEPTION:不能为null

提问于
浏览
0

我已经使用默认实现覆盖了Fragment类的onCreateAnimation方法,这导致了FATAL EXCEPTION . 为什么?

java.lang.RuntimeException:无法启动活动ComponentInfo {com.developer.pocviewmodel / com.developer.pocviewmodel.MainActivity}:java.lang.IllegalStateException:super.onCreateAnimation(transit,enter,nextAnim)不能为null

class MainFragment : Fragment() {

    companion object {
        fun newInstance() = MainFragment()
    }

    private lateinit var viewModel: MainViewModel

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

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
        // TODO: Use the ViewModel
    }

     override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation {
        return super.onCreateAnimation(transit, enter, nextAnim)
    }

}

1 回答

  • 1

    当@NotNull参数或变量为null时,或者@NotNull函数返回null时,抛出 java.lang.IllegalStateException : must not be null . onCreateAnimation 默认返回null .

    如果您反编译您的类,您将看到该函数的Java版本:

    @NotNull
    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
       Animation var10000 = super.onCreateAnimation(transit, enter, nextAnim);
       Intrinsics.checkExpressionValueIsNotNull(var10000, "super.onCreateAnimation(transit, enter, nextAnim)");
       return var10000;
    }
    

    onCreateAnimation 返回null,因此抛出异常,因为返回值标记为@NotNull . 重写方法并返回非null,或将返回类型更改为 Animation? . 但既然你不必覆盖它,它就不是抽象的 .

    对于记录,如果您使返回类型为可空,则这是反编译的Java代码:

    @Nullable
    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
       return super.onCreateAnimation(transit, enter, nextAnim);
    }
    

相关问题