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
}
}
}
}