如何迭代这个ArrayList算法,以便每次输入代码时都可以更改imageView的背景...例如。代码=“123456”| Background_1显示,Code =“123456”| Background_2显示......
enter = (ImageButton) findViewById(R.id.enter);
input = (EditText) findViewById(R.id.editText2);
punch_back_1 = (ImageView) findViewById(R.id.imageView6);
punch_back_2 = (ImageView) findViewById(R.id.imageView7);
punch_back_3 = (ImageView) findViewById(R.id.imageView8);
punch_back_4 = (ImageView) findViewById(R.id.imageView9);
final ArrayList<ImageView> array_image = new ArrayList<>();
array_image.add(punch_back_1);
array_image.add(punch_back_2);
array_image.add(punch_back_3);
array_image.add(punch_back_4);
enter.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
String code = input.getText().toString();
int i = 0;
if (code.equals("123456")) {
i++;
array_image.get(i).setImageResource(R.drawable.punch_front);
Toast.makeText(getApplication(), "Awarded 1 new punch", Toast.LENGTH_LONG).show();
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
input.setText(" ");
}
return false;
}
});
我试过这两件事:
for (int i = 0; i < 4; i++)
{
if (code.equals("123456"))
{
array_image.get(i).setImageResource(R.drawable.punch_front);
Toast.makeText(getApplication(), "Awarded 1 new punch", Toast.LENGTH_LONG).show();
}
}
int i = 0;
while (i < i)
{
array_image.get(i).setImageResource(R.drawable.punch_front);
Toast.makeText(getApplication(), "Awarded 1 new punch", Toast.LENGTH_LONG).show();
i++;
}
如果我没有弄错的话,那就是同样的事情。
下面的代码最终对我有用。 onTouch Action_UP是我的罪魁祸首。使用input.setText(null);做了我想要的同样效果并保持了我的理智......
enter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String code = input.getText().toString();
if (code.equals("123456") && index < array_image.size()) {
array_image.get(index).setImageResource(R.drawable.punch_front);
index++;
Toast.makeText(getApplication(), "Awarded " + index + " new punch", Toast.LENGTH_LONG).show();
input.setText(null);
}
}
});
答案 0 :(得分:0)
这样做需要你做两件事。
此外,您当然需要确保您不会超出界限。
首先为索引创建一个计数器作为成员。
private int index = 0;
接下来,你几乎要做你以前做过的事情。在您的事件监听器中:
if(code.equals("123456") && index < array_image.size())
{
array_image.get(index).setImageResource(R.drawable.punch_front);
index++;
}
这应该跟踪当前索引,增加下一个事件的位置,并且在您完成数组中的项目之后,当您外出时它不应该给您任何异常错误边界并尝试再次发射事件。