Изменить цвет текста выбранного элемента в виде списка (Kotlin, Android) - PullRequest
0 голосов
/ 03 июня 2019

У меня есть представление списка в моем приложении.Как я могу изменить цвет текста выбранного элемента?

Например, я выбираю какой-то элемент списка.Цвет его текста должен быть изменен с черного на серый.Затем я выбираю другой предмет.Его цвет текста также должен быть изменен с черного на серый, но цвет текста первого элемента должен снова стать черным.

Я попробовал следующий код, но получил исключение:

Попытка вызвать виртуальный метод 'void android.widget.TextView.setText(java.lang.CharSequence)' для пустой ссылки на объект

QuestionActivity.kt:

var answersList = arrayOf("about", "against", "for", "by")

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

    val selection= findViewById<TextView>(R.id.options)
    val lv = findViewById<ListView>(R.id.variants)
    val prodAdapter = ArrayAdapter<String>(this, R.layout.mytextview, answersList)
    lv.adapter = prodAdapter

    lv.setOnItemClickListener { parent, view, position, id ->
     val selectedItem = parent.getItemAtPosition(position).toString()
     selection.setText(selectedItem)
     selection.setTextColor(Color.DKGRAY)
    }}  

activity_question.xml:

<?xml version="1.0" encoding="utf-8"?>

    <ListView
        android:id="@+id/variants"
        android:divider="#FFFFFF"
        android:layout_width="347dp"
        android:layout_height="254dp" tools:ignore="MissingConstraints"
        app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="32dp"
        android:layout_marginStart="32dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="32dp"
        android:layout_marginRight="32dp" android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/appBarLayout" android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="@+id/button4"
    />
</android.support.constraint.ConstraintLayout>

и mytextview.xml:

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/options"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:textAppearance="?android:attr/textAppearanceListItemSmall"
      android:gravity="center_vertical"
      android:minHeight="?android:attr/listPreferredItemHeightSmall"
      android:textSize="20dp"
      android:textColor="#000000"
/>

Пожалуйста, помогите мне решить эту проблему

1 Ответ

0 голосов
/ 03 июня 2019

Вы должны использовать селекторы. Что-то вроде:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color ="@color/selected_color" android:state_selected="true"/>
    <item android:color ="@color/pressed_color" android:state_pressed="true"/>
    <item android:color ="@color/default_color"/>

</selector>

А затем используйте ваш селектор в XML-файле элемента:

android:textColor="@color/text_selector"

Вы можете получить больше информации здесь

...