onClick方法无法正常工作。

3
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_play);
    gl = (GridLayout) findViewById(R.id.grid);
    array = new Button[7][6];
    Button btn;
    for(int i=0; i<7; i++)
    {
        for(int j=0; j<6; j++)
        {
            btn = new Button(this);
            btn.setId(7*i + j + 1);
            array[i][j] = btn;
            gl.addView(btn);
        }
    }
    turn = 0;
    Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show();                

}

@Override
public void onClick(View v) 
{
    Toast.makeText(this, "Test1", Toast.LENGTH_SHORT).show();               
    if(v instanceof Button)
    {
        Toast.makeText(this, "Test2", Toast.LENGTH_SHORT).show();
        int[] d = GetCellByID(v.getId());
        Button b = (Button)v;
        b.setEnabled(false);
        if(turn == 0)
        {
            b.setBackgroundColor(Color.YELLOW);
            turn = 1;
        }
        else
        {
            b.setBackgroundColor(Color.RED);
            turn = 0;
        }
        array[d[0]][d[1]] = b;
    }
}

这里是代码,Toast用于测试代码是否正在运行。 该活动实现了OnClickListener. onClick方法不起作用,我使用它是因为我有42个按钮,而我无法为每个按钮编写42个setOnClickListener()方法。
在我的代码中,我使用两个循环创建了42个按钮(7*6),每次按下每个按钮时,它将被禁用并更改按钮的背景颜色,一次是黄色,下一次是红色。
5个回答

6
您在嵌套的for循环中漏掉了以下内容:
btn.setOnClickListener(this);

这里,this 指的是实现了 OnClickListener 接口的 Activity


6

你错过了为按钮设置onClickListner的步骤。

for(int i=0; i<7; i++)
{
    for(int j=0; j<6; j++)
    {
        btn = new Button(this);
        btn.setId(7*i + j + 1);
        array[i][j] = btn;
        gl.addView(btn);
        btn.setOnClickListener(this);
    }
}

4
根据您发布的代码片段,我没有看到任何将onClick方法与您的按钮链接起来的内容。请尝试添加:
btn.setOnClickListener(this);

进入for循环


4
在您的onCreate()方法中调用方法。
yourButton.setOnClickListener(this);

0

你必须在 onCreate() 中调用该方法。

试试这个:

yourbuttonname.setOnClickListener(this);

或者

yourbuttonname.setOnClickListener(yourActivity.this);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接