我有这个:
// Set up touch listeners for all the buttons
View cardButton = findViewById(R.id.C_0);
cardButton.setTag(0);
cardButton.setOnTouchListener(this);
View cardButton1 = findViewById(R.id.C_1);
cardButton1.setTag(1);
cardButton1.setOnTouchListener(this);
View cardButton2 = findViewById(R.id.C_2);
cardButton2.setTag(2);
cardButton2.setOnTouchListener(this);
View cardButton3 = findViewById(R.id.C_3);
cardButton3.setTag(3);
cardButton3.setOnTouchListener(this);
View cardButton4 = findViewById(R.id.C_4);
cardButton4.setTag(4);
cardButton4.setOnTouchListener(this);
View cardButton5 = findViewById(R.id.C_5);
cardButton5.setTag(5);
cardButton5.setOnTouchListener(this);
View cardButton6 = findViewById(R.id.C_6);
cardButton6.setTag(6);
cardButton6.setOnTouchListener(this);
View cardButton7 = findViewById(R.id.C_7);
cardButton7.setTag(7);
cardButton7.setOnTouchListener(this);
View cardButton8 = findViewById(R.id.C_8);
cardButton8.setTag(8);
cardButton8.setOnTouchListener(this);
但是我需要以编程方式生成它,所以我不能像这样写出来。不幸的是,我尝试了三种方法,但都没有奏效。首先:
for(int i = 0; i < 9; i++)
{
String bufferName = "C_" + i;
int tempid = getResources().getIdentifier(bufferName, "drawable", getPackageName());
View cardButton = findViewById(tempid);
cardButton.setTag(i);
cardButton.setOnTouchListener(this);
}
这给了我一个 NullPointerException。我不确定如何确定它。此外,android 的东西说你无论如何都不应该使用 getIdentifier,因为它很贵。
下一次尝试:
ViewGroup rootLayout=(ViewGroup) sv.getRootView();
View v;
int id = 0;
for(int i = 0; i < rootLayout.getChildCount(); i++) {
v = rootLayout.getChildAt(i);
if(v instanceof View)
{
v.setTag(id);
id += 1;
v.setOnTouchListener(this);
};
}
这里没有错误,但是所有按钮都不再起作用了。侦听器未设置好或触摸未正确记录或其他原因。
第三次尝试:
int[] ids = {R.id.C_0, R.id.C_1, R.id.C_2, R.id.C_3, R.id.C_4, R.id.C_5, R.id.C_6, R.id.C_7, R.id.C_8};
for (int id:ids)
{
ImageView b = (ImageView)findViewById(id);
b.setTag(ids);
b.setOnTouchListener(this);
}
这是最糟糕的方法,我不想使用它,但即使这样也行不通。我得到了 ClassCastException。我尝试使用ImageButton b = (ImageButton)findViewById(id);
,但仍然给我同样的错误。对不起,如果这完全是新的,但我花了几个小时试图找出一种方法来做到这一点。:(