簡體   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