首页 > 解决方案 > 为什么kotlin没有按照android的要求为片段创建一个Required的空公共构造函数?

问题描述

示例:在示例 Android Studio 项目中创建此文件:现在将其复制到 kotlin 文件并让它转换为 kotlin。

import androidx.fragment.app.Fragment;

public class TestJavaFragment extends Fragment {

    public TestJavaFragment() {
        // Required empty public constructor!!!
    }
}

Kotlin 转换后的代码:

import androidx.fragment.app.Fragment

class TestJavaFragment : Fragment()

工具 > 代码 > 显示 Kotlin 字节码 > 反编译。导致这件事没有 android 片段所需的空公共构造函数:

public final class TestJavaFragment extends Fragment {
   private HashMap _$_findViewCache;

   public View _$_findCachedViewById(int var1) {
      if (this._$_findViewCache == null) {
         this._$_findViewCache = new HashMap();
      }

      View var2 = (View)this._$_findViewCache.get(var1);
      if (var2 == null) {
         View var10000 = this.getView();
         if (var10000 == null) {
            return null;
         }

         var2 = var10000.findViewById(var1);
         this._$_findViewCache.put(var1, var2);
      }

      return var2;
   }

   public void _$_clearFindViewByIdCache() {
      if (this._$_findViewCache != null) {
         this._$_findViewCache.clear();
      }

   }

   // $FF: synthetic method
   public void onDestroyView() {
      super.onDestroyView();
      this._$_clearFindViewByIdCache();
   }
}

这使某些设备崩溃,因为它出现在 crashytics 中:

致命异常:java.lang.RuntimeException 无法启动活动 ComponentInfo{the.activity.launching.the.fragment}:androidx.fragment.app.Fragment$InstantiationException:无法实例化片段 OnboardingPage:找不到片段构造函数

还尝试使用静态 newInstance ,它使用来自活动的参数创建片段,并且在某些设备上也会崩溃。

那么发生了什么事,我在这里错过了什么?

谢谢。

标签: javaandroidkotlinandroid-fragmentsbytecode

解决方案


推荐阅读