Arrays 在Andoird Studio/Kotlin进行抽认卡测试/记忆

Arrays 在Andoird Studio/Kotlin进行抽认卡测试/记忆,arrays,loops,android-studio,kotlin,textview,Arrays,Loops,Android Studio,Kotlin,Textview,抱歉发了这么长的帖子!我正在试着制作一张记忆卡片,我已经坚持了一个星期了 这是数组 val sentenceArray = arrayOfNulls<String>(8) sentenceArray[0] = "" sentenceArray[1] = "Array 1 (1)" sentenceArray[2] = "Array 2 (2)" sentenceArray[3] = "Array 3 (3)" sentenceArray[4]

抱歉发了这么长的帖子!我正在试着制作一张记忆卡片,我已经坚持了一个星期了

这是数组

val sentenceArray = arrayOfNulls<String>(8)
    sentenceArray[0] = ""
    sentenceArray[1] = "Array 1 (1)"
    sentenceArray[2] = "Array 2 (2)"
    sentenceArray[3] = "Array 3 (3)"
    sentenceArray[4] = "Array 4 (4)"
    sentenceArray[5] = "Array 5 (5)"
这个密码呢

if (firstSentence < lastSentence)
                                    {
                                        textView.setOnClickListener {
                                            textView.text = sentenceArray[firstSentence]?.takeLast(3)
                                        }
                                    }
if(第一句<最后一句)
{
textView.setOnClickListener{
textView.text=句子数组[第一句]?.takeLast(3)
}
}
这两个代码导致该流
(1)
数组1
数组2
(2)

当它应该继续时完成(3)

您实际上不需要循环,因为循环是由用户单击文本视图处理的,在您的情况下,if条件就足够了

我观察到的另一件事是,您正在其他侦听器中设置单击侦听器和微调器侦听器。这不是必需的,并且使您的代码不可读且解析复杂,请注意,在您的情况下,您可以在同一级别上定义所有侦听器来实现您想要的,您不必嵌套它们

你可以做如下的事情。我已经取消了嵌套侦听器配置

   class Temp {

    lateinit var leftSpinner: Spinner
    lateinit var rightSpinner: Spinner
    lateinit var buttonStart: Button
    lateinit var sentenceArray: Array<String>
    lateinit var textView: TextView
    var selectedLeftSpinner = -1
    var selectedRightSpinner = -1

   private fun setup() {

        /** Define left spinner item selected listener, capture the selected position */
        leftSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {}
            override fun onItemSelected(
                parent: AdapterView<*>?, view: View?,
                position: Int, id: Long) {
                selectedLeftSpinner = position
            }
        }

        /** Define right spinner item selected listener, capture the selected position */
        rightSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {}
            override fun onItemSelected(
                parent: AdapterView<*>?, view: View?,
                position: Int, id: Long) {
                selectedRightSpinner = position
            }
        }

        /** Define button start click listener, show text if left spinner is selected. */
        buttonStart.setOnClickListener {
            /** only set text if left spinner is selecte */
            if(selectedLeftSpinner != -1){
                textView.text = sentenceArray[selectedLeftSpinner]?.takeLast(3)
            }
        }

/** Handle edge cases, such as what happens if spinner is not selected */
    textView.setOnClickListener {
        /** if currently selected item's last 3 chars are being shown,
         *  then show the answer.
         */
        if(textView.text == sentenceArray[selectedLeftSpinner]?.takeLast(3)){
            textView.text = sentenceArray[selectedLeftSpinner]
        }
        /** if answer is being shown then show last three chars of next item */
        else if(selectedLeftSpinner < selectedRightSpinner){
            selectedLeftSpinner++
            textView.text = sentenceArray[selectedLeftSpinner]?.takeLast(3)
        }
        /** else we have reached the last item */
        else{
            buttonStart.text = "DONE"
            /** reset left spinner to not selected state */
            selectedLeftSpinner = -1
        }
    }

    }
}
class-Temp{
lateinit变量leftSpinner:微调器
lateinit var rightSpinner:微调器
lateinit var按钮启动:按钮
lateinit var语句数组:数组
lateinit var textView:textView
var selectedLeftSpinner=-1
var selectedRightSpinner=-1
私人娱乐设置(){
/**定义左微调器项选定侦听器,捕获选定位置*/
leftSpinner.onItemSelectedListener=对象:AdapterView.onItemSelectedListener{
覆盖未选择的乐趣(父项:AdapterView?{}
已选择“覆盖”选项(
父项:AdapterView?,视图:view?,
位置:Int,id:Long){
selectedLeftSpinner=位置
}
}
/**定义右微调器项选定侦听器,捕获选定位置*/
rightSpinner.onItemSelectedListener=对象:AdapterView.onItemSelectedListener{
覆盖未选择的乐趣(父项:AdapterView?{}
已选择“覆盖”选项(
父项:AdapterView?,视图:view?,
位置:Int,id:Long){
selectedRightSpinner=位置
}
}
/**定义按钮开始单击侦听器,如果选择了左微调器,则显示文本*/
buttonStart.setOnClickListener{
/**仅当选择左微调器时设置文本*/
如果(已选择左微调器!=-1){
textView.text=sentenceArray[selectedLeftSpinner]?.takeLast(3)
}
}
/**处理边缘情况,如未选择微调器时发生的情况*/
textView.setOnClickListener{
/**如果显示当前选定项目的最后3个字符,
*然后给出答案。
*/
if(textView.text==sentenceArray[selectedLeftSpinner]?.takeLast(3)){
textView.text=sentenceArray[selectedLeftSpinner]
}
/**如果显示答案,则显示下一项的最后三个字符*/
else if(selectedLeftSpinner

这应该是可行的,但我没有考虑任何边缘情况,因此您必须处理它们,并且还有其他改进的空间,例如使用键、值结构(ex-map)存储闪存卡问题和答案。由于微调器的两个侦听器相同,代码仍然可以减少,我把它留作练习。

textView.setOnClickListener下的if语句修复了这个问题!我是Kotlin的新手,一直想知道如何避免所有那些您也帮助过的嵌套命令!非常感谢!
textView.setOnClickListener {
                                        if (textView.text == sentenceArray[firstSentence])
                                        textView.text = sentenceArray[firstSentence]?.takeLast(3)
                                    }
if (firstSentence < lastSentence)
                                    {
                                        textView.setOnClickListener {
                                            textView.text = sentenceArray[firstSentence]?.takeLast(3)
                                        }
                                    }
   class Temp {

    lateinit var leftSpinner: Spinner
    lateinit var rightSpinner: Spinner
    lateinit var buttonStart: Button
    lateinit var sentenceArray: Array<String>
    lateinit var textView: TextView
    var selectedLeftSpinner = -1
    var selectedRightSpinner = -1

   private fun setup() {

        /** Define left spinner item selected listener, capture the selected position */
        leftSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {}
            override fun onItemSelected(
                parent: AdapterView<*>?, view: View?,
                position: Int, id: Long) {
                selectedLeftSpinner = position
            }
        }

        /** Define right spinner item selected listener, capture the selected position */
        rightSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {}
            override fun onItemSelected(
                parent: AdapterView<*>?, view: View?,
                position: Int, id: Long) {
                selectedRightSpinner = position
            }
        }

        /** Define button start click listener, show text if left spinner is selected. */
        buttonStart.setOnClickListener {
            /** only set text if left spinner is selecte */
            if(selectedLeftSpinner != -1){
                textView.text = sentenceArray[selectedLeftSpinner]?.takeLast(3)
            }
        }

/** Handle edge cases, such as what happens if spinner is not selected */
    textView.setOnClickListener {
        /** if currently selected item's last 3 chars are being shown,
         *  then show the answer.
         */
        if(textView.text == sentenceArray[selectedLeftSpinner]?.takeLast(3)){
            textView.text = sentenceArray[selectedLeftSpinner]
        }
        /** if answer is being shown then show last three chars of next item */
        else if(selectedLeftSpinner < selectedRightSpinner){
            selectedLeftSpinner++
            textView.text = sentenceArray[selectedLeftSpinner]?.takeLast(3)
        }
        /** else we have reached the last item */
        else{
            buttonStart.text = "DONE"
            /** reset left spinner to not selected state */
            selectedLeftSpinner = -1
        }
    }

    }
}