Изменить цвет фона элемента ListView программно - PullRequest
0 голосов
/ 18 февраля 2019

Допустим, у нас есть ListView основных текстовых элементов:

package cz.nanuq.test

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.*

class MainActivity : AppCompatActivity() {

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

        // Init listView
        val listView = findViewById<ListView>(R.id.listView)

        var values : Array<String> = arrayOf("foo", "bar", "baz", "boo")
        var adapter : ArrayAdapter<String> = ArrayAdapter(this, android.R.layout.simple_list_item_1, values)
        listView.setAdapter(adapter)

        // Change background color of one listView item
        var index : Int = 2               // can change dynamically
        var bgColor : String = '#123456'  // can change dynamically
        //...how? 
    }

}

Теперь я хочу изменить цвет фона элемента с индексом 2 на "# 123456".

Как это сделать?


PS Для этой простой задачи я ищу простое решение.Что-то вроде:

listView.getItem(index).setAttribute("background", bgColor)

По сути, мне просто нужно получить доступ к подкомпоненту ListView и изменить его атрибут.

1 Ответ

0 голосов
/ 18 февраля 2019

Я только что использовал код из вопроса И получил ожидаемый результат.Это определенно помогает и самый простой способ.мы можем реализовать адаптер и изменить представления так, как мы хотим.Пожалуйста, попробуйте следующий код.

import android.graphics.Color
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.TextView

class MainActivity : AppCompatActivity() {

    private val values: Array<String> = arrayOf("foo", "bar", "baz", "boo")

    // Change background color of one listView item
    private var index: Int = 0               // can change dynamically®
    private var bgColor: String = "#ffffff"  // can change dynamically

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

        // Init listView
        val listView: ListView = findViewById(R.id.listView)

        val adapter: ArrayAdapter<String> =
            object : ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values) {
                override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
                    val v = super.getView(position, convertView, parent)

                    val tv = v.findViewById<TextView>(android.R.id.text1)

                    if (index == position) {
                        tv.setBackgroundColor(Color.parseColor(bgColor))
                        tv.setTextColor(Color.WHITE)
                    } else {
                        tv.setBackgroundColor(Color.TRANSPARENT)
                        tv.setTextColor(Color.BLACK)
                    }

                    return v
                }
            }

        listView.adapter = adapter


        // For -- Explanation / testing purpose, I used handler here.
        update(adapter)
    }

    private fun update(adapter: ArrayAdapter<String>) {

        // For -- Explanation / testing purpose, I used handler here.

        Handler().postDelayed({
            index = 0
            bgColor = "#123456"
            adapter.notifyDataSetChanged()
        }, 1000)

        Handler().postDelayed({
            index = 1
            bgColor = "#c544fc"
            adapter.notifyDataSetChanged()
        }, 2000)

        Handler().postDelayed({
            index = 2
            bgColor = "#123456"
            adapter.notifyDataSetChanged()
        }, 3000)

        Handler().postDelayed({
            index = 3
            bgColor = "#c544fc"
            adapter.notifyDataSetChanged()

            // For -- Explanation / testing purpose, (REPEATING / LOOPING).
            update(adapter)
        }, 4000)
    }
}

Результат выглядит следующим образом.Счастливое кодирование:)

Divakar Murugesh's Answer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...