繁体   English   中英

如何一次遍历一个Java Arraylist

[英]How to Iterate through a Java Arraylist one at a time

我如何遍历此ArrayList算法,以便每次输入代码时都可以更改imageView的背景...例如Code =“ 123456” | Background_1显示,代码=“ 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. 保留要更改的索引的数量。
  2. 使用后增加索引。

另外,您当然也需要确保自己不会超出范围。

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

private int index = 0;

接下来,您将想要做几乎之前要做的事情。 在您的事件监听器中:

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

这应该跟踪当前索引,为下一个事件增加其位置,并且在遍历数组中的项目之后,当您超出范围并尝试触发该事件时,它不应给您任何异常错误事件再次发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM