Не удается получить данные из EditText view в диалоговом окне оповещения

#android #xml #kotlin #android-edittext #android-alertdialog

#Android #xml #kotlin #android-edittext #android-alertdialog

Вопрос:

Я создал AlertDialog, который в основном содержит два EditTexts для ввода данных (идентификатор компонента, имя компонента).Когда пользователь нажимает кнопку «Да» в диалоговом окне оповещения, в базу данных добавляется новый компонент (на данный момент я не добавил никаких прослушивателей щелчков для кнопок «Да» и «Нет» в диалоговом окне), но по какой-то причине я не могу получить данные из текста редактирования. Я новичок в разработке приложений для Android, пожалуйста, помогите мне, ребята…..Заранее спасибо 🙂

Примечание: 1. Я использую ViewModel.установите флажок, чтобы AlertDialog оставался постоянным при поворотах.

  1. Метод onCancel() просто отменяет AlertDialog (я намерен использовать это для обновления определенных параметров).

Это код kotlin, который создает диалоговые окна оповещения.

 fun onAddComponent()
    {
        val builder = AlertDialog.Builder(requireActivity())

        builder?.setTitle("New Component Info")
        val inflater = requireActivity().layoutInflater

        builder?.setView(inflater.inflate(R.layout.new_comp, null))

        builder?.setPositiveButton(R.string.Okay_button){ dialogInterface, which->
            viewModel.flag = false
            val editText : EditText? =  compAlert?.findViewById(R.id.new_Component)
            println(editText.toString())
        }
        builder?.setNegativeButton(R.string.NO){ dialogInterface, which->
            viewModel.flag = false
        }



            compAlert= builder?.create()
        compAlert?.setOnCancelListener{OnCancel()}
        viewModel.flag = true
        compAlert?.show()

    }
 

Это макет xml, который я раздул в onAddComponent ()

 <androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <EditText
        android:id="@ id/new_Component"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:ems="10"
        android:hint="comp Id"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@ id/new_component_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:hint="comp name"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="@ id/new_Component"
        app:layout_constraintStart_toStartOf="@ id/new_Component"
        app:layout_constraintTop_toBottomOf="@ id/new_Component" />
</androidx.constraintlayout.widget.ConstraintLayout>
 

Ответ №1:

Чтобы получить текст внутри EditText, который вам нужно выполнить editText.getText().toString() , а НЕ editText.toString() тот, который у вас есть в вашем коде.

В вашем коде editText.toString() будет возвращено строковое представление объекта EditText. Смотрите Документацию toString() по методу String здесь .

Комментарии:

1. Да … я сделал это только сейчас .. Я понял это после публикации вопроса, и тип ввода в коде xml должен быть changed..it работает нормально.. большое спасибо