Я только что использовал код из вопроса И получил ожидаемый результат.Это определенно помогает и самый простой способ.мы можем реализовать адаптер и изменить представления так, как мы хотим.Пожалуйста, попробуйте следующий код.
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)
}
}
Результат выглядит следующим образом.Счастливое кодирование:)