动态setOnClickListener

KrL*_*ler 3 android button listener onclicklistener

我动态创建不同的按钮,如下所示:

for (int toShow = 1; toShow <= nShips; toShow++)
    {
        btn = new Button(this);
        btn.setBackgroundResource(shipDrawable.get(ima));
        btn.setLayoutParams(params);
        row[pos].addView(btn);
        btn.setId(shipId.get(ima));
        if (row[pos].getChildCount() == 3) pos++;
        ima++;
    }
Run Code Online (Sandbox Code Playgroud)

我需要知道每个按钮的身份,因为彼此有不同的动作.然后,我尝试这样设置onClickListener:

btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View btn) {
            switch(btn.getId()){
                case 1000: System.out.println("FIRST");
                break;

                case 1004: System.out.println("FOURTH");
                break;
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

但它不起作用.似乎onClickListener唯一影响最后一个项目的创建.如果我创建四个按钮,只有第四个按钮会有一个onClickListener.

如何让我的点击监听器工作?

Hir*_*ral 5

你可以这样做:

OnClickListener clicks=new OnClickListener() {

    @Override
    public void onClick(View v) {

            switch(v.getId())
            {
                case 1000: System.out.println("FIRST");
                break;

                case 1004: System.out.println("FOURTH");
                break; 
            }       
    }
};
for (int toShow = 1; toShow <= nShips; toShow++)
{
        btn = new Button(this);
        btn.setBackgroundResource(shipDrawable.get(ima));
        btn.setLayoutParams(params);
        row[pos].addView(btn);
        btn.setId(shipId.get(ima));
        btn.setOnClickListener(clicks);
        if (row[pos].getChildCount() == 3) pos++;
        ima++;
}
Run Code Online (Sandbox Code Playgroud)