我如何交换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)
}
}
});
所以,我有两个选择:
非常感谢,非常感谢您的帮助!
答案 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
。