2017-09-20 1 views
0

Ich versuche, einen Alarmdialog zu erstellen, obwohl ich ein sehr seltsames Problem habe. Mein Text gibt mir den Fehler "unaufgelöste Referenz". Ich triple und Quadra überprüft, kann aber nicht wirklich den Grund finden. Hierungelöste Referenz: Text - Android Studio + Kotlin (findViewById Fehler?)

ist der Code:

fun addChannelClicked(view: View) { 
    if (AuthService.isLoggedIn) { 
     val builder = AlertDialog.Builder(this) 
     val dialogView = layoutInflater.inflate(R.layout.add_channel_dialog, null) 

     builder.setView(dialogView) 
       .setPositiveButton("Add") { dialogInterface, i -> 
        // perform some logic when clicked 
        val nameTextField = dialogView.findViewById<EditText>(R.id.addChannelNameTxt) 
        val descTextField = dialogView.findViewById<EditText>(R.id.addChannelDescTxt) 
        val channelName = nameTextField.text.toString() 
        val channelDesc = descTextField.text.toString() 

        // Create channel with the channel name and description 
        hideKeyboard() 

       } 
       .setNegativeButton("Cancel") { dialogInterface, i -> 
        // Cancel and close the dialog 
        hideKeyboard() 
       } 
       .show() 
    } 
} 
+0

Der Code scheint korrekt zu sein. Sie können den Cursor auf 'nameTextField' setzen und' Strg + Q' drücken, um zu sehen, ob es 'EditText' ist. – BakaWaii

+0

ist anscheinend ein Problem mit findViewById, aber ich weiß nicht, wie man das ersetzt –

Antwort

1

Sie shoul immer überprüfen, ob der Wert null ist. Dies kann unter Verwendung von if(yourvar != null) geschehen, und Kotlin wird in den folgenden Zeilen automatisch in den Nicht-Null-Typ konvertiert. Sie können dazu auch den elvis-Operator (?:) verwenden.

Dies stellt sicher, dass Sie eine Nicht-Null-Instanz für die Ansicht zurückgeben oder die Funktion verlassen, wenn nicht. und dann können Sie rufen safelly:

val nameTextField = dialogView.findViewById<EditText>(R.id.addChannelNameTxt) 

Die Verwendung !! Operator ist nicht recommened, vom doc:

Die !! Betreiber ist für NPE-Liebhaber.

+0

immer überprüfen, wenn ich sage, die Wurzel ist null? will nur sichergehen, dass ich was otnerstand mache :) –

+0

Ich verstehe deine Frage nicht – crgarridos

+0

"Du solltest immer überprüfen ob der Wert null ist". Sie meinen, ich sollte jedes Mal überprüfen, wenn mein root null ist? –

0

Bitte verwenden Sie diese Art von Syntax

val nameTextField = dialogView!!.findViewById(R.id.addChannelNameTxt) as EditText 
+2

Verwenden Sie definitiv nicht die '.' -Syntax. –

+0

hat es funktioniert! Könnten Sie mir bitte erklären warum? –

+0

@ MarošŠeleng Android Studio schlagen vor. Soll ich verwenden? Syntax –

Verwandte Themen