Изменить атрибуты внешнего объекта в адаптере, если в адаптере не указано количество объектов - PullRequest
0 голосов
/ 13 сентября 2018

Я новичок в Kotlin, и я хотел бы начать программирование настолько эффективно, насколько это возможно, это означает, что в этом примере в моем адаптере не указано количество объектов. Я пытаюсь сделать список кнопок 2 не определенным, а затем сделать события onClick, которые должны изменить 1 текст в списке кнопок, но я пытаюсь сделать его видимым и редактируемым в "MyCustomAdapter: BaseAdapter () ». Может быть, указать это внутри адаптера? Я не совсем уверен, что-то поможет, спасибо.

class ChoosingSpells : AppCompatActivity() {

private fun spellSpec(spellCode: Int, index: Int): String {                                        // going to be server function...or partly made from server
    val returnSpec = when(spellCode) {
        3 -> arrayOf("Fire Ball","@drawable/firespell", "20","level","description")
        4 -> arrayOf("Freezing touch", "@drawable/icespell","30","level","description")
        5 -> arrayOf("Wind hug", "@drawable/windspell","40","level","description")
        else -> arrayOf("null","null","null")
    }
    return returnSpec[index]
}

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

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

    textLabel.text  = "This works in here"
    listView.adapter = MyCustomAdapter()
}

    private class MyCustomAdapter: BaseAdapter() {


        private val learnedSpells = arrayOf(3,4,5,0,0,3,4,5,0,0,3,4,5,0,0,3,4,5,0,0,3,4,5,0,0,3,4,5,0,0,3,4,5,0,0,3,4,5,0,0)
        private val spellsInUse = arrayOf(0,0,0,0,0)


        override fun getCount(): Int {
            return (learnedSpells.size/2)
        }

        override fun getItemId(position: Int): Long {
            return position.toLong()
        }

        override fun getItem(position: Int): Any {
            return "TEST STRING"
        }

        override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup?): View {
            val rowMain: View

            if (convertView == null) {
                val layoutInflater = LayoutInflater.from(viewGroup!!.context)
                rowMain = layoutInflater.inflate(R.layout.row_choosingspells, viewGroup, false)
                val viewHolder = ViewHolder(rowMain.button1, rowMain.button2)
                rowMain.tag = viewHolder
            } else {
                rowMain = convertView
            }
            val viewHolder = rowMain.tag as ViewHolder

            viewHolder.button1.setBackgroundResource(getDrawable(learnedSpells[if(position==0){0}else{position*2}]))
            viewHolder.button2.setBackgroundResource(getDrawable(learnedSpells[if(position==0){1}else{position*2+1}]))
            var clicks1 = 0
            var clicks2 = 0
            viewHolder.button1.setOnClickListener {
                clicks1++
                if(clicks1==1){         //single click
                    /*textLabel.text = spellSpec(learnedSpells[if(position==0){0}else{position*2}],0)  I just want to change text of an external label, which is not part of the adapter here
                    textLevel.text = spellSpec(learnedSpells[if(position==0){0}else{position*2}],3)
                    textStats.text = spellSpec(learnedSpells[if(position==0){0}else{position*2}],2)
                    textDescription.text = spellSpec(learnedSpells[if(position==0){0}else{position*2}],4)*/
                    textLabel.text  = "This doesn't work here"
                }else if(clicks1==2){

                }
                clicks1=0
            }
            viewHolder.button2.setOnClickListener {
                clicks2++
                if(clicks2==1){         //single click
                    /*textLabel.text = spellSpec(learnedSpells[if(position==0){1}else{position*2+1}],0)
                    textLevel.text = spellSpec(learnedSpells[if(position==0){1}else{position*2+1}],3)
                    textStats.text = spellSpec(learnedSpells[if(position==0){1}else{position*2+1}],2)
                    textDescription.text = spellSpec(learnedSpells[if(position==0){1}else{position*2+1}],4)*/
                }else if(clicks2==2){   //double click

                }
                clicks2=0
            }
            return rowMain
        }
        private fun getDrawable(index:Int): Int {
            return(when(index) {
                3 -> R.drawable.firespell
                4 -> R.drawable.icespell
                5 -> R.drawable.windspell
                0 -> R.drawable.shield
                else -> NULL
            }
            )
        }

        private class ViewHolder(val button1: TextView, val button2: TextView)

    }

}

1 Ответ

0 голосов
/ 15 октября 2018

Только что добавлен новый конструктор для передачи необходимых данных.

...