1

我有这个:

// 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);,但仍然给我同样的错误。对不起,如果这完全是新的,但我花了几个小时试图找出一种方法来做到这一点。:(

4

1 回答 1

0

首先:
您的第一次尝试非常接近......您在这里使用了错误的类型:

int tempid = getResources().getIdentifier(bufferName, "drawable", getPackageName());

你想要一个id,使用:

int tempid = getResources().getIdentifier(bufferName, "id", getPackageName());

下一次尝试:
这个看起来还可以,可能是OnTouchListener出错了。


第三次尝试:
ClassCastException 仅意味着您在 XML 中声明的任何 View 类型必须是您在 Java 代码中使用的 View 类型的类...

于 2013-01-04T06:58:55.390 回答