java - 为什么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 ,它使用来自活动的参数创建片段,并且在某些设备上也会崩溃。
那么发生了什么事,我在这里错过了什么?
谢谢。
解决方案
推荐阅读
- c# - 创建自动更新 Windows 服务
- c# - 将代理凭据注入所有 HttpClient 请求
- google-apps-script - 发送带有内嵌图像和正文的电子邮件
- python - IO 绑定任务中的 Python 多线程
- c# - 是否有用于 UWP 应用程序自行卸载的 API?C#
- php - 发布 Laravel AJAX 请求会传递 0 个参数
- vue.js - Vue单文件组件,如何挂载多个?
- java - Java:在 Spring RestControllerAdvice 异常处理程序中未触发自定义枚举验证器注释
- c# - 无法加载文件或程序集“路径”或其依赖项之一。该系统找不到指定的文件
- flutter - 您是否必须在 Flutter 中手动处理来自 streamprovider 的流?