如何一次迭代一个Java Arraylist

时间:2016-11-01 18:33:06

标签: java android

如何迭代这个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);
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

编辑:我似乎误解了你的问题。看起来好像你想让每个火灾事件只出现一次图像。

这样做需要你做两件事。

  1. 记录您将要更改的索引。
  2. 使用后增加索引。
  3. 此外,您当然需要确保您不会超出界限。

    首先为索引创建一个计数器作为成员。

    private int index = 0;
    

    接下来,你几乎要做你以前做过的事情。在您的事件监听器中:

    if(code.equals("123456") && index < array_image.size())
    {
        array_image.get(index).setImageResource(R.drawable.punch_front);
        index++;
    }
    

    这应该跟踪当前索引,增加下一个事件的位置,并且在您完成数组中的项目之后,当您外出时它不应该给您任何异常错误边界并尝试再次发射事件。