android - 访问 EditText ID 数据返回 Null
问题描述
我是 Android Kotlin 的新手,我无法访问我在 xml 中为 input_mtk ID 输入的值,它总是在 Kotlin 文件上返回 null。这是我的代码
XML 文件
<TextView
android:id="@+id/matematika"
android:layout_width="wrap_content"
android:layout_height="19dp"
android:layout_marginStart="56dp"
android:layout_marginTop="20dp"
android:gravity="center_horizontal|top"
android:text="@string/matematika"
android:textAppearance="@style/string_form"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/input_bahasa_inggris" />
<EditText
android:id="@+id/input_mtk"
style="@style/shape2"
android:layout_marginStart="56dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="230dp"
android:inputType="numberDecimal"
android:maxLength="5"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/matematika" />
科特林文件
class ResultFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_result, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
getData()
}
fun getData() {
var Mat = input_mtk.text.toString()
Log.e("test", Mat)
}
}
它显示了这个错误
java.lang.NullPointerException: input_mtk must not be null
at com.xx.xx.ResultFragment.getData(ResultFragment.kt:38)
at com.xx.xx.ResultFragment.onViewCreated(ResultFragment.kt:33)
如果我
var Mat = input_mtk.text.toString()
改为
var Mat = input_mtk?.text.toString()
清楚地表明 input_mtk id 返回 null
2021-08-29 16:49:22.158 15887-15887/com.xx.xx E/test: null
解决方案
input_mtk.text
onViewCreated()
如果 Kotlin 合成导入或视图绑定未正确完成,则可以为 null 。onViewCreated()
此外,在完成执行之前,您可能不会在 EditText 中输入任何内容
把它放在一个按钮的点击监听器中:
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
然后在你的 Kotlin 类中,访问它:
var input = ""
my_button.setOnClickListener {
input = input_mtk.text.toString()
}
这里input
将保存来自您的 EditText 的字符串
注意:我假设您使用的是 Kotlin 合成器。如果是,建议迁移到 View Bindings - https://developer.android.com/topic/libraries/view-binding/migration
推荐阅读
- c# - 无法捕获 DbUpdateConcurrencyException 并抛出 UserFriendlyException
- php - 接口的 PHP 特性
- java - 如何在java中制作扫描仪块
- webpack - ReferenceError: undefinedPopper 未定义
- regex - nginx rewrite 翻译一些特殊字符
- javascript - 由于客户端未注册,Fetch 事件未在服务工作者的第一次页面加载中执行
- react-native - React Navigation 将参数传递给嵌套的 stackNavigator
- c# - 无法从 IdentityServer4 获取配置
- javascript - 移除基于 innerHTML 的 HTML 元素
- java - Tablayout 和 Viewpager 无法正常工作