如何使用 getResources().getIdentifier 获取 Button id?

How to use getResources().getIdentifier to get a Button id?

我正在尝试制作一个简单的应用程序。
我有一个 table,其中一行有七个按钮。
我知道我不需要二维数组,但我想使用它。
所以我以后可以很容易地扩展它。

我正在使用

int resID = getResources().getIdentifier("button" + i + h, "button", getPackageName());

尝试从按钮获取资源 ID。
我的按钮被命名为“button00、button01、button02 等(这正是 R.java 中的名称)。
数字分别代表行和列。 我以前见过有人用过这个,但出于某种原因我永远无法让它工作。

这是我的灯光代码class

public class lights extends Activity implements OnClickListener {
public int numRows;
public int numCol;


public lights(int rows, int col) {
    numRows = rows;
    numCol = col;
}


public void createButtonListeners(Button[][] button) {
    for (int i = 0; i < numRows; i++) {
        for (int h = 0; h < numCol; h++) {
            int resID = getResources().getIdentifier("button" + i + h, "button", getPackageName());
            button[i][h] = (Button) findViewById(resID);
            button[i][h].setOnClickListener((View.OnClickListener) this);
            Toast.makeText(getBaseContext(), "Made listener", Toast.LENGTH_LONG).show();
        }
    }
}


public void reset(Array buttons[][]) {
    for (int r = 0; r < numRows; r++) {
        for (int c = 0; c < numCol; c++) {

            //havnt got this far
        }

    }

}


public int wasButtonPressed() {
    for (int row = 0; row < numRows; row++) {


    }

    return 0;
}

@Override
public void onClick(DialogInterface dialog, int which) {

}}

Main_Activity

代码
public class MainActivity extends Activity implements View.OnClickListener {

lights mlights = new lights(1, 7);
Button Button[][] = new Button[mlights.numRows][mlights.numCol];


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mlights.createButtonListeners(Button);

}


@Override
public void onClick(View v) {

}}

我输入代码时没有错误,但它没有 运行。
请以任何可能的方式纠正我

如果你想获取一个id,第二个参数应该是"id"

您正在尝试获取 R.id 值,而不是 R.button 值,因为它们不存在

你还在你的灯上实现了错误的点击监听器 Activity(无论如何都不应该扩展 Activity,但这与你的问题无关......如果你当前的代码不起作用)

提示:试试这个 public lights(Context c, int rows, int col) 并使用 c.getResources 使用那个 Context 来创建你的资源,或者可能是你从 Activity(因为这是唯一可以调用 findViewById 的地方)