java.lang.IndexOutOfBoundsException: индекс: 2, размер: 2 при выборе элемента счетчика - PullRequest
1 голос
/ 21 ноября 2019

Я пытаюсь нажать на элемент Spinner, и когда я нажимаю на 1 кг, он падает и выдает ошибку

Blockquote java.lang.IndexOutOfBoundsException: Index: 2, Size: 2

Вот мой код для Spinner и It listner: -

Вот мой статический массив: -

 val values = arrayOf(
        "250 gm",
        "500 gm",
        "1 Kg",
        "2 Kg",
        "3 Kg",
        "4 Kg", "5 Kg", "6 Kg", "7 Kg"
    )

set ArrayAdapter: -

 ArrayAdapter(
        context,
        android.R.layout.simple_spinner_item,
        values
    ).also {
        it.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        holder.product_spinner_kg.adapter = it
    }

и это Listner этого блесна: -

holder.product_spinner_kg.onItemSelectedListener =
        object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {

            }

            override fun onItemSelected(
                parent: AdapterView<*>?, view: View?, position: Int, id: Long
            ) {


                selectedQty = values[position]

                if (position == 0) {
                    holder.product_price.text =
                        "Rs. " + (items[position].price.toDouble() * 0.25)
                } else if (position == 1) {
                    holder.product_price.text =
                        "Rs. " + (items[position].price.toDouble() * 0.50)
                } else if (position == 2) {
                    holder.product_price.text =
                        "Rs. " + (items[position].price.toDouble() * 1.00)
                } else if (position == 3) {
                    holder.product_price.text =
                        "Rs. " + (items[position].price.toDouble() * 2.00)
                } else if (position == 4) {
                    holder.product_price.text =
                        "Rs. " + (items[position].price.toDouble() * 3.00)
                }

            }
        }

Мое исключение: -

java.lang.IndexOutOfBoundsException: Индекс: 2, размер: 2 в java.util. ArrayList.get (ArrayList.java:437) в com.maruti.marutisabji.adapter.user.ProductAdapter $ onBindViewHolder $ 3.onItemSelected (ProductAdapter.kt: 107) в android.widget.AdapterView.fireOnSelected (AdapterView.java:9):android.widget.AdapterView.dispatchOnItemSelected (AdapterView.java:933) в android.widget.AdapterView.access $ 300 (AdapterView.java:53) в android.widget.AdapterView $ SelectionNotifier.run (AdapterView.java:898) в android. os.Handler.handleCallback (Handler.java:873) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:201) на android.app.ActivityThread.main (ActivityThread.java:6820) на java.lang.reflect.Method.invoke(Собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:547) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:922)

Это мой код Ссылка Пожалуйста, проверьте его: - https://gist.github.com/maulikdadhaniya/c0e16a9a13d03e9b7abe2235a35e7324

Ответы [ 2 ]

1 голос
/ 21 ноября 2019

Я бы предложил ниже блок кода, чтобы избежать такого рода ошибки IndexOutOfBound:

Вместо того, чтобы обращаться к объекту напрямую из массива, мы можем использовать AdapterView, чтобы найти выбранный элемент на основе позиции.

В вашем onItemSelected() методе слушателя,

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
    // We can retrive selected item from adapter using below approach, so that it never give out of bound error.
    selectedQty = parent?.getItemAtPosition(position) as? String 
    // Your rest of the code of else-if ladder also seems miscellaneous to me
}
0 голосов
/ 21 ноября 2019

Ваш код должен заканчиваться блоком else

...