Слушатель Chip Group меняет положение чипа при воссоздании фрагмента

Я создаю чип программно. Чипы создаются, но когда приложение останавливается (не уничтожается) и снова открывается, положение чипа изменяется в прослушивателе группы чипов.

Вот мой код:

private lateinit var playlist: Array<Pair<String, String>>

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
for (item in playlist){
    createChip(item.first)
}}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
chip_group.setOnCheckedChangeListener { chipGroup, position ->
    for (i in 0 until chipGroup.childCount){
        val chip = chipGroup.getChildAt(i)
        chip.isClickable = chip.id != chipGroup.checkedChipId
    }
    Toast.makeText(context, position.toString(), Toast.LENGTH_SHORT).show()
}}

fun createChip(name: String){
    val chip = Chip(chip_group.context)
    chip.text = name
    chip.isClickable = true
    chip.isCheckable = true
    chip.isCheckedIconVisible = false
    chip_group.addView(chip)
}

Я ожидаю, что чип будет иметь ту же позицию, когда приложение снова откроется, но вместо этого позиция увеличится.


person Hussnain Haidar    schedule 20.01.2019    source источник
comment
вы можете добавить тег к чипу chip.tag=123   -  person    schedule 21.01.2019


Ответы (1)


Вы смешиваете id с position.
onCheckedChanged(ChipGroup group, int checkedId) — метод интерфейса, который вызывается при смене проверенного чипа.

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
var index=0
for (item in playlist){
    createChip(item.first,index++)
}}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
chip_group.setOnCheckedChangeListener { chipGroup, id ->
    for (i in 0 until chipGroup.childCount){
        val chip = chipGroup.getChildAt(i)
        chip.isClickable = chip.id != chipGroup.checkedChipId
    }
    Toast.makeText(context, position.toString(), Toast.LENGTH_SHORT).show()
}}

fun createChip(name: String,index:Int){
    val chip = Chip(chip_group.context)
    chip.text = name
    chip.isClickable = true
    chip.isCheckable = true
    chip.isCheckedIconVisible = false
    chip.id=index //maybe you can use tag
    chip_group.addView(chip)
}
person Community    schedule 21.01.2019