Удалить элемент из списка (Kotlin) - PullRequest
0 голосов
/ 05 октября 2019

Моя цель с этим кодом состоит в том, чтобы представить список («listView»), который в основном заполняется значениями, предоставленными разработчиком, а затем перемещается во вторую часть, где удаляются элементы, которые нажимает пользователь.

Первая часть идет по желанию, список выглядит так, как определено. Но во второй части программа не запускается, закрывая приложение.

Файл MainActivity.kt

class MainActivity : AppCompatActivity() {
    private val defns = ArrayList<String>()
    private lateinit var myAdapter : ArrayAdapter<String>

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

        putElementsList()

        listView_elements.setOnItemClickListener{ _, _, index, _ ->
            defns.removeAt(index)
            myAdapter.notifyDataSetChanged()
        } 
    }

    private fun putElementsList() {
        defns.add("piggy")
        defns.add("dumas")
        defns.add("kika")
        defns.add("songahn")
        defns.add("festeira")

        defns.shuffle() 

        val myAdapter = ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, defns)
        listView_elements.adapter = myAdapter
    }
}

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="word"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            android:id="@+id/TextView_word" android:layout_marginTop="8dp"
            app:layout_constraintTop_toBottomOf="@+id/textView_title" app:layout_constraintVertical_bias="0.02"
            android:textSize="18sp"/>
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Vocab builder game"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" android:id="@+id/textView_title"
            app:layout_constraintHorizontal_bias="0.526" app:layout_constraintVertical_bias="0.043"
            android:textStyle="bold" android:textSize="30sp" android:textColor="@android:color/background_dark"/>
    <ListView
            android:layout_width="395dp"
            android:layout_height="600dp"
            android:id="@+id/listView_elements"
            app:layout_constraintTop_toBottomOf="@+id/TextView_word"
            android:layout_marginTop="12dp"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginStart="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="8dp"
            app:layout_constraintHorizontal_bias="0.0"/>

</androidx.constraintlayout.widget.ConstraintLayout>

1 Ответ

0 голосов
/ 05 октября 2019

Единственная проблема здесь - это когда вы создаете «Адаптер», который вы назначаете локальному val myAdapter, поэтому, когда вы пытаетесь уведомить, член класса по-прежнему неинициализирован.

Решение

изменить:

val myAdapter = ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, defns)

на

myAdapter = ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, defns)

...