我可以切换onClick监听器吗?

时间:2015-11-28 19:32:27

标签: java android arrays xml string

我如何交换onClick侦听器,同时又能够知道哪个按钮是哪个?

我原来的问题是: Image taking too long to load?

我试图在每个地方删除并重新添加视图(交换两个按钮),但过程非常缓慢。所以我决定尝试更改按钮的属性,而不是交换按钮本身。这将要求我跟踪按钮AND交换监听器

我有一个交换按钮(红色按钮)。单击时,它会使用其他三个按钮中的一个,并与它们交换。其他三个按钮不做任何其他事情。

这是我的原始代码(删除/重新添加视图而不是切换属性):

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

                // Remove the clicked button from it's frame layout parent.
                    ViewManager p = (ViewManager) v.getParent();
                    p.removeView(v);
                    // Find another button randomly.
                    Random rng = new Random();
                    View v2;
                    do
                    {
                        int i = rng.nextInt(4);
                        v2 = buttons.get(i);
                    }
                    while (v2 == v); // Loop until you get a different button to swap with.
                    // Remove the other button from it's frame layout parent.
                    ViewManager p2 = (ViewManager) v2.getParent();
                    p2.removeView(v2);
                    // Now simply insert each button into the other buttons frame layout.
                    p.addView(v2, v2.getLayoutParams()); //Adding v2, the random button, into where v, the button clicked, was before(p)!
                    p2.addView(v, v.getLayoutParams()); //Adding v, the button clicked, into where v2, the random button, was before(p2)
                }
   }
       });

所以,我有两个选择:

  1. 以某种方式使响应更快(我不知道如何...因此this
  2. 通过交换点击监听器和图片,以某种方式更改按钮的属性。并以某种方式能够跟踪新的交换按钮,以便我可以再次交换。
  3. 非常感谢,非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

为每个按钮指定一个监听器。然后,在监听器中,只检查按下按钮的背景(应该作为onClick的参数传入)是否具有红色背景。

Drawable redBackgroundDrawable = new Drawable(R.drawable.redImage)



public void onClick(View v){



if(v.getBackground == redBackgroundDrawable){

//Execute code

}else{

//We don't care about it!

}

}

我发现比较位图比比较drawable更容易......所以你可以让redBackgroundDrawable成为bitmapImage