我有这个:
// 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);
,但仍然遇到了同样的错误。对不起,如果这是全新的,但我花了好几个小时试图找到一种方法来做到这一点。 :(
答案 0 :(得分:0)
<强>首先强>
你的第一次尝试非常接近......
你在这里使用了错误的类型:
int tempid = getResources().getIdentifier(bufferName, "drawable", getPackageName());
您需要id
,请使用:
int tempid = getResources().getIdentifier(bufferName, "id", getPackageName());
下一次尝试:
这个看起来没问题,也许是OnTouchListener有错误。
第三次尝试:
ClassCastException只是意味着您在XML中声明的任何View类型必须是您在Java代码中使用的View类型...