#android #android-studio #kotlin
#Android #android-studio #kotlin
Вопрос:
как я могу заставить пользователя выбирать (нажав на изображение) между 2 изображениями n раз, используя цикл for?
ниже я создал массив из 4 рисуемых изображений и установил для него значение rank2. в каждом цикле пользователь выбирает одно из 2 изображений, затем выбранное изображение сохраняется в массиве rank1. поскольку сейчас есть только 4 чертежа, он будет повторяться только 2 раза.
val imageView1 = findViewById<ImageView>(R.id.imageView1);
val imageView2 = findViewById<ImageView>(R.id.imageView2);
val textView = findViewById<TextView>(R.id.textView);
var rank2 = mutableListOf(R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4)
val rank1: MutableList<Int> = ArrayList()
var x = 0;
while(x<2) {//run it 2 times
var temp = arrayOf(rank2[x*2], rank2[(x*2) 1]);
imageView1.setImageResource(temp[0]);
imageView2.setImageResource(temp[1]);
imageView1.setOnClickListener{
rank1.add(temp[0]);
x ;
}
imageView1.setOnClickListener{
rank1.add(temp[1]);
x ;
}
}
но этот попадает в бесконечный цикл.
как я могу это исправить?
Ответ №1:
Нет необходимости использовать while
цикл. Все, что вам нужно, — это счетная переменная.
var rank2 = mutableListOf(R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4)
val rank1: MutableList<Int> = ArrayList()
imageView1.setImageResource(rank2[0]);
imageView2.setImageResource(rank2[1]);
var x = 0
imageView1.setOnClickListener{
if (x < 2) {
rank1.add(rank2[2 * x])
imageView1.setImageResource(rank2[2 * (x 1)])
imageView2.setImageResource(rank2[2 * (x 1) 1])
x
}
}
imageView2.setOnClickListener{
if (x < 2) {
rank1.add(rank2[2 * x 1])
imageView1.setImageResource(rank2[2 * (x 1)])
imageView2.setImageResource(rank2[2 * (x 1) 1])
x
}
}
Ответ №2:
Попробуйте создать рекурсивный метод вместо цикла, который вызывает себя nLoops раз. Попробуйте что-то вроде этого:
fun c(b: Int, nLoops: Int) {
if (b!=nLoops) {
var x = b;
var temp = arrayOf(rank2[x * 2], rank2[(x * 2) 1]);
imageView1.setImageResource(temp[0]);
imageView2.setImageResource(temp[1]);
imageView1.setOnClickListener
{
rank1.add(temp[0]);
x ;
c(x, nLoops);
}
imageView1.setOnClickListener
{
rank1.add(temp[1]);
x ;
c(x, nLoops);
}
}
}
Когда вы запускаете что-то вроде этого с b = 0 и nLoops = 2, он выполнит ваш код только после того, как вы нажмете изображение 2 раза.