Home > Back-end >  Android Getting text of textInputEditText in a dialog
Android Getting text of textInputEditText in a dialog

Time:09-24

I am trying to get the text of a textInputEditText, which is in a dialog (to be exact the onCreateDialog method in the set positive button section), but it doesn't work. I've read many of the questions which already are on StackOverflow, but none helped me.

The variable inputAddTunnel in which the text should be saved, but it is always just equal to "":

private fun getInput(): String {
    val inputAddTunnel = this.layoutInflater.inflate(R.layout.dialog_add_vpn_tunnel,null).findViewById<TextInputEditText>(R.id.input_add_tunnel).getText().toString()

    return inputAddTunnel
}

The Xml for the dialog is:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<com.google.android.material.textfield.TextInputLayout
    android:id="@ id/input_add_tunnel_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:hint="@string/name_of_vpn">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@ id/input_add_tunnel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"/>
</com.google.android.material.textfield.TextInputLayout>

Edit: Here is the onCreateDialog() method

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return activity?.let {

        val builder = androidx.appcompat.app.AlertDialog.Builder(it)
        // Get the layout inflater
        val inflater = requireActivity().layoutInflater

        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        builder.setView(inflater.inflate(R.layout.dialog_add_vpn_tunnel, null))
            // Add action buttons
            .setPositiveButton(R.string.add_vpn_tunnel,
                DialogInterface.OnClickListener { dialog, id ->
                    // Add VPN tunnel
                    addVpn()
                })
            .setNegativeButton(R.string.cancel,
                DialogInterface.OnClickListener { dialog, id ->
                    getDialog()?.cancel()
                })
        builder.create()
    } ?: throw IllegalStateException("Activity cannot be null")
}

And this is the addVpn method, which is called in onCreateDialog():

private fun addVpn() {
    // TODO test function addVpn(); count doesn't work properly
    val count = activity?.getPreferences(AppCompatActivity.MODE_PRIVATE)?.getInt("countTunnels", -1)
    val inputAddTunnel = getInput()

    // If inputAddTunnel is not equal to "", put it in getPreferences
    if(inputAddTunnel != "") { //TODO test if !== is needed, not !=
        activity?.getPreferences(AppCompatActivity.MODE_PRIVATE)?.
        edit()?.putString("tunnel$count", inputAddTunnel).apply {  }
    }

    // Edit the count in getPreferences to the incremented count
    count?.plus(1)
    if (count != null) {
        activity?.getPreferences(AppCompatActivity.MODE_PRIVATE)?.getInt("countTunnels", count)
    }
}

CodePudding user response:

You are re-inflating a brand new view, not querying from the one you already set for your dialog.

You should call findViewById on the root dialog view that you initially inflated. Please share your onCreateDialog method for more help.

CodePudding user response:

You need to get editext object from dialog view and call getText() method

Edittext edittext= getDialog().getView().findViewbyId(R.id.editText);

edittext.getText(); // for getting textvalue from editetxt
  • Related