访问 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.textonViewCreated() 中可以为 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" )
    }