为什么kotlin没有按照android的要求为片段创建一个必需的空公共构造函数?

vxqlmq5t  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(450)

示例:在一个示例androidstudio项目中创建这个文件:现在将它复制到一个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无法启动activity componentinfo{the.activity.launching.the.fragment}:androidx.fragment.app.fragment$instantiationexception:无法在BoardingPage上示例化片段:找不到片段构造函数
还尝试了一个静态newinstance,它使用活动中的参数创建片段,在某些设备上也会崩溃。
怎么了,我还缺什么?
谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题