访问 EditText ID 数据 returns Null
Accessing EditText ID data returns Null
我是 Android Kotlin 的新手,我无法访问我在 xml 上为 input_mtk ID 输入的值,在 Kotlin 上它总是 returns 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" />
Kotlin 文件
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 returns null
2021-08-29 16:49:22.158 15887-15887/com.xx.xx E/test: null
我不太明白,你想干什么。
EditText
是用户输入一些数据的视图。当您创建应用程序并 运行 它时,它有一个 null
值,也就是“没有内容”。
如果需要,您可以在 xml 中手动添加文本:
<EditText
android:id="@+id/input_mtk"
android:text="sometext"
... />
但它的意义为零,因为此视图旨在让用户有机会输入自己的数据,并且在大多数情况下应该为空。使用 TextView
代替
如果要读取输入的数据,可以使用按钮:
yourButton.setOnClickListener { input_mtk?.text.toString() }
如果 Kotlin 合成导入或视图绑定未正确完成,input_mtk.text
在 onViewCreated()
中可以为 null。
此外,在 onViewCreated()
完成执行
时,您可能还没有在 EditText 中输入任何内容
将它放在按钮的点击侦听器中:
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
然后在您的 Kotlin class 中访问它:
var input = ""
my_button.setOnClickListener {
input = input_mtk.text.toString()
}
此处 input
将保存来自您的 EditText
的字符串
注意:我假设您使用的是 Kotlin 合成器。如果是,建议迁移到View Bindings - https://developer.android.com/topic/libraries/view-binding/migration
如果你使用 viewBinding,你可以这样做
首先使用viewBinding
private lateinit var binding: FragmentResultBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentResultBinding.inflate(inflater)
return binding.root
}
并像这样更改函数 getData
private fun getData(){
val input = binding.inputMtk.text.toString()
Log.e("FragmentResult", "getData: input: $input" )
}
我是 Android Kotlin 的新手,我无法访问我在 xml 上为 input_mtk ID 输入的值,在 Kotlin 上它总是 returns 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" />
Kotlin 文件
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 returns null
2021-08-29 16:49:22.158 15887-15887/com.xx.xx E/test: null
我不太明白,你想干什么。
EditText
是用户输入一些数据的视图。当您创建应用程序并 运行 它时,它有一个 null
值,也就是“没有内容”。
如果需要,您可以在 xml 中手动添加文本:
<EditText
android:id="@+id/input_mtk"
android:text="sometext"
... />
但它的意义为零,因为此视图旨在让用户有机会输入自己的数据,并且在大多数情况下应该为空。使用 TextView
代替
如果要读取输入的数据,可以使用按钮:
yourButton.setOnClickListener { input_mtk?.text.toString() }
input_mtk.text
在 onViewCreated()
中可以为 null。
此外,在 onViewCreated()
完成执行
将它放在按钮的点击侦听器中:
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
然后在您的 Kotlin class 中访问它:
var input = ""
my_button.setOnClickListener {
input = input_mtk.text.toString()
}
此处 input
将保存来自您的 EditText
注意:我假设您使用的是 Kotlin 合成器。如果是,建议迁移到View Bindings - https://developer.android.com/topic/libraries/view-binding/migration
如果你使用 viewBinding,你可以这样做
首先使用viewBinding
private lateinit var binding: FragmentResultBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentResultBinding.inflate(inflater)
return binding.root
}
并像这样更改函数 getData
private fun getData(){
val input = binding.inputMtk.text.toString()
Log.e("FragmentResult", "getData: input: $input" )
}