Кнопка в диалоге всегда возвращает ноль в onStart () во фрагменте - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть диалоговое окно «Фрагмент», и мне требуется текст внутри диалогового окна, затем нажмите кнопку «ОК», и после нажатия на кнопку появляется ошибка ссылки на нулевой объект.

class BFragment : Fragment() {
    override fun onStart() {
    super.onStart()

    fun showDialog(){
        //get Dialog : Numbers
        val dialogView = LayoutInflater.from(context)
            .inflate(R.layout.dialog_b, null)
        //AlertDialog builder
        val dialogBuilder = AlertDialog.Builder(context)
            .setView(dialogView)
        //Show Dialog
        val alertDialog = dialogBuilder.show()

        //setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        dialogView.btn_ok.setOnClickListener {

            Log.d("Clicked", et_one.text.toString())

            alertDialog.dismiss()
        }
     }

    run_btn.setOnClickListener {

        showDialog()
    }
  }
}

. xml

<EditText
        android:id="@+id/et_one"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Exp: 100_000_000"
        android:text="100000000"
        android:inputType="numberDecimal" />

Logcat

02-12 21:27:56.219 18190-18190/com.example.algorithmsapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.algorithmsapp, PID: 18190
    java.lang.IllegalStateException: et_one must not be null
        at com.example.algorithmsapp.AlgorithmsFragments.BFragment$onStart$1$1.onClick(BFragment.kt:63)

1 Ответ

0 голосов
/ 13 февраля 2020

Вам нужно инициализировать текст редактирования здесь, чтобы получить значение из текста редактирования. Добавьте строку ниже свой код

var et_one: EditText
var btn_ok: Button
    et_one= layoutInflateView.findViewById(R.id.et_one)
    btn_ok= layoutInflateView.findViewById(R.id.btn_ok)

Так ваш код выглядит следующим образом:

 fun showDialog(){
    //get Dialog : Numbers
    val dialogView = LayoutInflater.from(context)
        .inflate(R.layout.dialog_b, null)
    //AlertDialog builder
    val dialogBuilder = AlertDialog.Builder(context)
        .setView(dialogView)
    //Show Dialog
    val alertDialog = dialogBuilder.show()
    var et_one: EditText
    var btn_ok: Button

    et_one= layoutInflateView.findViewById(R.id.et_one)
    btn_ok= layoutInflateView.findViewById(R.id.btn_ok)
    //setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    dialogView.btn_ok.setOnClickListener {

        Log.d("Clicked", et_one.text.toString())

        alertDialog.dismiss()
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...