我创建了一个应用程序,它有一个元素"Number (Decimal)",cid result_editText
我想让它在某个时间点后无法更改,为此我写了
result_editText.setEnabled(false);
result_editText.setCursorVisible(false);
但是在设备上编译运行时,应用程序崩溃了(已经编译,在桌面显示为图标,但启动时崩溃)
我决定检查一下出了什么问题,所以我以这种方式重写了代码:
//result_editText.setEnabled(false);
//result_editText.setCursorVisible(false);
Log.d("tag", result_editText.text.toString())
但问题依然存在。你能建议可能是什么问题吗?
附言kotlinx.android.synthetic.main.fragment_home.* импортирован
PPS 注释掉对 result_editText 的调用后,程序完全可以正常工作。
PPPS 这是此电子邮件的 xml 表示形式



如果您使用 Kotlin,则无需调用
findViewById(). 但是在这里你需要记住两件事。在 Activity 中,您的布局通过方法
onCreate()调用在方法中膨胀,setContentView()之后您可以立即使用合成。如果您在调用此方法之前尝试使用合成,您将获得IllegalStateException.一个常见的错误是在 Fragments 中使用合成材料的类似尝试。由于在 Java 中您为变量赋值,
onCreateView()因此许多初学者试图借助 Kotlin 中的合成器来做同样的事情,但不太了解它是如何工作的。让我解释:
正如您在此处看到的,为了通过
findViewById()您使用已膨胀的 View 来访问 ViewLayoutInflater。因为你可以访问这些 id。但是在 Kotlin 中,程序中此时的合成还不能访问这个链接。我没有亲自尝试过,但我敢肯定,如果你通过它在这个地方引用你的变量,
view.textView它会起作用。但更合乎逻辑的方法是开始使用方法中已有的
onViewCreated()或以后的 XML 元素。该方法表示 View 已经创建并准备就绪。我想你的问题就在这里。