【问题标题】:Nested onClick Listener嵌套 onClick 监听器
【发布时间】:2014-05-04 11:04:04
【问题描述】:

我有一些需要帮助的代码。我对这段代码的计划很简单。我有 3 个buttons,它们是yellowBargreenBarredBar。我也有 3 张黄色、绿色和红色的图像。我想做的是当我启动我的应用程序时,我的图像会随机弹出,无论出现哪种颜色,我都应该能够单击具有相应颜色的按钮。我也有时间,所以基本上我想尽可能的正确点击,但是我的代码只运行一次。我的时间继续减少,但这段代码只运行一次。我该如何解决这个问题,以便它会继续弹出随机彩色图像,直到时间用完?

while(gameTime > 0){
                colorNum = new Random();
                colorNumber = colorNum.nextInt(2);

                switch (colorNumber){
                    case 0: colors.setDisplayedChild(0);
                            break;

                    case 1: colors.setDisplayedChild(1);
                            break;

                    case 2: colors.setDisplayedChild(2);
                            break;
                }
                colors.setVisibility(View.VISIBLE);
                yellowBar.setOnClickListener(new View.OnClickListener(){

                    @Override
                    public void onClick(View v){
                        if(colorNumber == 0){
                            points ++;
                            score.setText(String.valueOf(points));
                        }
                    }
                });
                greenBar.setOnClickListener(new View.OnClickListener(){

                    @Override
                    public void onClick(View v){
                        if(colorNumber == 1){
                            points ++;
                            score.setText(String.valueOf(points));
                        }
                    }
                });
                redBar.setOnClickListener(new View.OnClickListener(){

                    @Override
                    public void onClick(View v){
                        if(colorNumber == 2){
                            points++;
                            score.setText(String.valueOf(points));
                        }
                    }
                });

            }

【问题讨论】:

  • 最好只调用一次setOnClickListener
  • 如果我需要三个变量来使用 setOnClickListener,我该怎么做?
  • 我的意思是你在 while 循环中调用该方法,这会导致该方法在每个不必要的循环中都被调用。

标签: java android eclipse onclicklistener


【解决方案1】:

更好的解决方案是渲染您的图形 onClick 事件。 当你按下一个按钮时,你会检查答案是否正确,然后你会渲染图形。

像现在这样使用 while 循环是错误的,因为您的图形将一直呈现(无论是否按下按钮)

基本上(这不是解决方案,而是基于您的代码的指南):

         public void initialize(){
            yellowBar.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v){
                    if(colorNumber == 0){
                        points ++;
                        score.setText(String.valueOf(points));
                        updateColors();
                    }
                }
            });
            greenBar.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v){
                    if(colorNumber == 1){
                        points ++;
                        score.setText(String.valueOf(points));
                        updateColors();
                    }
                }
            });
            redBar.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v){
                    if(colorNumber == 2){
                        points++;
                        score.setText(String.valueOf(points));
                        updateColors();
                    }
                }
            });

        }
     }

     public void updateColors(){
     colorNum = new Random();
            colorNumber = colorNum.nextInt(2);

            switch (colorNumber){
                case 0: colors.setDisplayedChild(0);
                        break;

                case 1: colors.setDisplayedChild(1);
                        break;

                case 2: colors.setDisplayedChild(2);
                        break;
            }
            colors.setVisibility(View.VISIBLE);
     }

【讨论】:

  • 我不知道该怎么做,这实际上是我学习应用程序开发的第一学期,我的导师没有帮助。我使用我在 stackoverflow 中学到的东西。你能指导我做这个吗?
  • 哦,这更有意义!谢谢先生! +1 @MocialovBoris
猜你喜欢
  • 2016-08-16
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多