【问题标题】:onClickListner with for loop not working带有 for 循环的 onClickListener 不起作用
【发布时间】:2016-05-20 09:10:15
【问题描述】:

变量 i 没有递增,如果答案是正确的,那么我想通过递增变量 i 来问另一个问题。我实现了 OnClickListner 但什么也没发生。我是安卓新手,谢谢。

public class MainActivity extends AppCompatActivity{

        ImageView car, icecream, pencil, umbrella, ball;
        TextView question, answer;
        int i, size, j;
        final String[] objects  = {"car", "icecream", "pencil", "ball","umbrella"};

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

           final Animation expandIn = AnimationUtils.loadAnimation(this, R.anim.expand_in);




            size = objects.length;
            car = (ImageView) findViewById(R.id.car);

            umbrella = (ImageView) findViewById(R.id.umbrella);

            icecream = (ImageView) findViewById(R.id.icecream);

            pencil = (ImageView) findViewById(R.id.pencil);

            ball = (ImageView) findViewById(R.id.ball);

            question = (TextView) findViewById(R.id.question);
            answer = (TextView) findViewById(R.id.answer);

            j=0;
            for (i=0; i < size; i++)

            {

                if(i == j){
                    question.setText("");
                    question.setText("Where is "+objects[i]+" ?");
                    car.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            answer.setVisibility(View.VISIBLE);
                            if("car"==objects[i]){
                                answer.setText("Right Answer");
                                answer.setTextColor(Color.parseColor("#008000"));
                                j++;
                                car.startAnimation(expandIn);


                            } else {
                                answer.setText("Wrong Answer");
                                answer.setTextColor(Color.RED);

                                answer.postDelayed(new Runnable() {
                                    public void run() {
                                        answer.setVisibility(View.INVISIBLE);
                                    }
                                }, 2000);

                            }

                        }
                    });

                    icecream.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            answer.setVisibility(View.VISIBLE);
                            if("icecream"==objects[i]){
                                answer.setText("Right Answer");
                                j++;

                            } else {
                                answer.setText("Wrong Answer");
                                answer.setTextColor(Color.RED);

                                answer.postDelayed(new Runnable() {
                                    public void run() {
                                        answer.setVisibility(View.INVISIBLE);
                                    }
                                }, 2000);

                            }

                        }
                    });

                    pencil.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            answer.setVisibility(View.VISIBLE);
                            if("pencil"==objects[i]){
                                answer.setText("Right Answer");
                                j++;
                            } else {
                                answer.setText("Wrong Answer");
                                answer.setTextColor(Color.RED);

                                answer.postDelayed(new Runnable() {
                                    public void run() {
                                        answer.setVisibility(View.INVISIBLE);
                                    }
                                }, 2000);

                            }

                        }
                    });


                    ball.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            answer.setVisibility(View.VISIBLE);
                            if("ball"==objects[i])

                            {
                                answer.setText("Right Answer");
                                j++;

                            } else {
                                answer.setText("Wrong Answer");
                                answer.setTextColor(Color.RED);

                                answer.postDelayed(new Runnable() {
                                    public void run() {
                                        answer.setVisibility(View.INVISIBLE);
                                    }
                                }, 2000);

                            }

                        }
                    });


                    umbrella.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            answer.setVisibility(View.VISIBLE);
                            if("umbrella"==objects[i]){
                                answer.setText("Right Answer");
                                j++;

                            } else {
                                answer.setText("Wrong Answer");
                                answer.setTextColor(Color.RED);

                                answer.postDelayed(new Runnable() {
                                    public void run() {
                                        answer.setVisibility(View.INVISIBLE);
                                    }
                                }, 2000);

                            }

                        }
                    });





                }
                j = j+1;
                break;

           }


    }

【问题讨论】:

  • 你不能在循环中设置 OnClickListener()。在 OnClickListener() 方法中迭代循环。
  • 你上面的问题可以不用循环解决。此外,循环不会对接口的方法起作用。原因是您的循环已经执行,但您的 OnClickListener() 从未被调用。所以最后你总是会得到循环的最大值
  • 根据您的代码,“j++”只会在 onClick 调用时发生,这就是为什么 i==j 只会在以后工作一次 i 永远不等于 j 所以它永远不会进入 if(){... .....}
  • 感谢您的回复,:)

标签: java android for-loop increment


【解决方案1】:

j = j+1 之后,您将退出 for 循环

【讨论】:

    【解决方案2】:

    谢谢大家,我通过在 OnClickListener() 方法中迭代循环解决了这个问题。感谢您的指导。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多