Searchable Spinner implementation

dialog_searchable_spinner.XML

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:orientation="vertical"

    android:padding="16dp"

    android:background="@android:color/white"

    >

   

    <!-- Text view to show the text Select course-->

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Select Course"

        android:textSize="20sp"

        android:textStyle="bold"

        />

   

    <!-- Edit text to allow user to type name

           of item he/she wants to search-->

    <EditText

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:id="@+id/edit_text"

        android:hint="Search..."

        android:padding="12dp"

        android:singleLine="true"

        android:layout_marginTop="8dp"

        android:layout_marginBottom="8dp"

        android:background="@android:drawable/editbox_background"

        />

   

      <!-- List view to insert list of items-->

    <ListView

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:id="@+id/list_view"

        />

 

</LinearLayout>

Implementing Searchable spinner

Declaration of array list and add items into array list by API response

lateinit var productsarrayList: ArrayList<String>



try {
    when {
        response.code() == 200 -> {
            cataloguelistResponse = response.body()!!
            if (cataloguelistResponse.error=="0") {

                // Set up the Spinner with the custom adapter
                productsarrayList=ArrayList()
                if(cataloguelistResponse.maincategories.size>0)
                {
                    for (i in cataloguelistResponse.maincategories)
                    {
                        productsarrayList!!.add(i.name)
                    }
                    setupSpinner(productsarrayList!!)
                }


 internal fun setupSpinner(items:ArrayList<String>) {
        val textview = findViewById<TextView>(R.id.testView)
        val imageview = findViewById<ImageView>(R.id.imageview)

        ProductBinding.testView.setOnClickListener {
            // Initialize dialog
            dialog = Dialog(this@AddCatalogueProduct)

            // Set custom dialog layout
            dialog!!.setContentView(R.layout.searchablespinnerlayout)

            // Set custom height and width
            dialog!!.window?.setLayout(800, 800)

            // Set transparent background
            dialog!!.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

            // Show dialog
            dialog!!.show()
            // Initialize variables from dialog
            val editText = dialog!!.findViewById<EditText>(R.id.edit_text)
            val listView = dialog!!.findViewById<ListView>(R.id.list_view)

            // Initialize custom adapter
//            val customAdapter = CustomProductsSoinnerAdapter(items, this)
            val adapter: ArrayAdapter<String> = ArrayAdapter<String>(
                this@AddCatalogueProduct,
                android.R.layout.simple_list_item_1,
                items
            )
            // Set adapter
            listView.adapter = adapter

            editText.addTextChangedListener(object : TextWatcher {
                override fun beforeTextChanged(
                    s: CharSequence?,
                    start: Int,
                    count: Int,
                    after: Int
                ) {
                }
                override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                    adapter.filter.filter(s)
                }
                override fun afterTextChanged(s: Editable?) {}
            })

            listView.setOnItemClickListener { parent, view, position, id ->
                // When item selected from list
                // Set selected item on textView
//               val selectedItem = items[position]
//                var  name=selectedItem
                textview.text = adapter.getItem(position).toString()
                // Dismiss dialog
//                itemId
                for (i in cataloguelistResponse.maincategories)
                {
                    if(i.name==textview.text)
                    {
                        itemId=i.id
                        Picasso.get().load(i.image).into(imageview)
                       // showToast(itemId.toString())
                    }
                }
                dialog!!.dismiss()
            }
        }
    }


Sign In or Register to comment.