web-dev-qa-db-fra.com

Android Bouton Kotlin + boîte de dialogue d'alerte + liste

J'ai ce code:

var firstKitList = mutableListOf<String>("test", "potato", "another item")

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_kit_list)

    val mainKitList = kitListView
    val mainListViewAdapter = ArrayAdapter(this, Android.R.layout.simple_list_item_1, firstKitList)
    mainKitList.adapter = mainListViewAdapter

    newKitListBtn.setOnClickListener {
        // Handler code here.
        val intent = Intent(this, NewKitListActivity::class.Java)
        startActivity(intent);
    }
}

Pour cela mise en page . Comment puis-je faire le tour lorsque je clique sur le bouton, pour afficher une boîte de dialogue d'alerte pour moi aussi ajouter un nom (comme si je créais un élément à ajouter à cette liste), puis passer à l'activité suivante? (cette partie est déjà créée comme vous pouvez le voir sur le code)

9
TimonYT

J'ai créé une fonction qui contient une boîte de dialogue d'alerte avec editText. Lorsque votre clic sur le nom de sauvegarde sera stocké dans multableList et redirigé vers une nouvelle activité.

Code modifié

var firstKitList = mutableListOf<String>("test", "potato", "another item")
// Mutable List for holding names
val nameList = mutableListOf<String>()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_kit_list)

    val mainKitList = kitListView
    val mainListViewAdapter = ArrayAdapter(this, Android.R.layout.simple_list_item_1, firstKitList)
    mainKitList.adapter = mainListViewAdapter

    newKitListBtn.setOnClickListener {
        // Show Alert Dialog
        showNewNameDialog()              
    }
}

Fonction de dialogue d'alerte

fun showNewNameDialog() {
        val dialogBuilder = AlertDialog.Builder(this)
        val inflater = this.layoutInflater
        val dialogView = inflater.inflate(R.layout.custom_dialog, null)
        dialogBuilder.setView(dialogView)

        val editText = dialogView.findViewById<EditText>(R.id.editTextName) 

        dialogBuilder.setTitle("Custom dialog")
        dialogBuilder.setMessage("Enter Name Below")
        dialogBuilder.setPositiveButton("Save", { dialog, whichButton ->
            //do something with edt.getText().toString();

           // Add Name in list
            nameList.add(editText.text.toString())
            // Handler code here.
            val intent = Intent(this, NewKitListActivity::class.Java)
            startActivity(intent);
        })

        dialogBuilder.setNegativeButton("Cancel", { dialog, whichButton ->
            //pass
        })
        val b = dialogBuilder.create()
        b.show()
    }

Disposition de boîte de dialogue personnalisée: custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:padding="10dp"
    Android:orientation="vertical">

    <EditText
        Android:id="@+id/editTextName"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:inputType="text" />

</LinearLayout>
11
Rajesh Dalsaniya

J'ai changé le code de la réponse de Rajesh Dalsaniya pour être un peu plus concis en utilisant les fonctionnalités de kotlin:

fun showNewNameDialog(activity: Activity) {
    AlertDialog.Builder(activity).apply {
        val dialogView = activity.layoutInflater.inflate(R.layout.custom_dialog, null)
        val editText = dialogView.findViewById<EditText>(R.id.editTextName)

        setView(dialogView)

        setTitle("Custom dialog")
        setMessage("Enter Name Below")
        setPositiveButton("Save") { _, _ ->
            //do something with edt.getText().toString();

            // Add Name in list
            activity.nameList.add(editText.text.toString())
            // Handler code here.
            val intent = Intent(activity, NewKitListActivity::class.Java)
            activity.startActivity(intent);
        }

        setNegativeButton("Cancel") { _, _ ->
            //pass
        }
    }.create().show()
}

Le xml reste:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:padding="10dp"
    Android:orientation="vertical">

    <EditText
        Android:id="@+id/editTextName"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:inputType="text" />
</LinearLayout>
0
Christian