Как реализовать TextWatcher в DialogFragment - PullRequest
0 голосов
/ 24 января 2020

В моем приложении я создаю список для поиска внутри фрагмента диалога. Вверху мой editText с примененным к нему TextWatcher.

Однако, когда TextWatcher подключен к EditText из onCreateDialog, я получаю «java .lang.IllegalStateException: search_box не должен быть нулевым». Когда это вместо этого помещается внутри onViewCreated, onViewCreated никогда даже не вызывается.

Может кто-нибудь объяснить, что мне не хватает? Большое спасибо заранее

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val layoutInflater = activity.layoutInflater
    val mainView = layoutInflater.inflate(R.layout.search_p, null)
    val builder = AlertDialog.Builder(activity)
    builder.setView(mainView)

    val layout = mainView.findViewById(R.id.results_layout) as LinearLayout
    var line = 0

    for(i in nameList){
        createButton(line,layout)
        line++
    }

    //Below line: java.lang.IllegalStateException: search_box must not be null
    search_box.afterTextChanged {
        val search = search_box.text.toString().toLowerCase()
        line = 0
        layout.removeAllViews()
        for(i in nameList){
            if(contains(search,nameList[line].toLowerCase())){
                createButton(line,layout)
            }
            line++
        }
    }

    return builder.create()
}

private fun EditText.afterTextChanged(afterTextChanged: (String)-> Unit) {
    this.addTextChangedListener(object: TextWatcher {
        override fun beforeTextChanged(p0:CharSequence?,p1:Int,p2:Int,p3:Int) { }
        override fun onTextChanged(p0:CharSequence?,p1:Int,p2:Int,p3:Int) {  }
        override fun afterTextChanged(editable: Editable?){
            afterTextChanged.invoke(editable.toString())
        }
    }) }

1 Ответ

0 голосов
/ 24 января 2020

кажется, что ваш Edittext равен нулю.

убедитесь, что ваш Edittext не равен нулю

val search_box = mainView.findViewById(R.id.youredittext) as EditText


search_box.afterTextChanged {
   // do whatever
}
...